首页 > 代码库 > linux学习笔记四(shell编程二)

linux学习笔记四(shell编程二)

写一个脚本:

计算100以内所有能被3整除的正整数的和;

取模,取余:%

3%2=1

100%55=45

#!/bin/bash

let SUM=0

for I in {1..100};do

        TMP=$[$I%3]

        if [ $TMP -eq 0 ];then

                SUM=$[$SUM+$I]

        fi

done

echo "SUM is $SUM"

写一个脚本:

计算100以内所有奇数的和以及所有偶数的和;分别显示之;

写一个脚本:

每5秒钟进行判断某用户是否登录。

#!/bin/bash

for I in `seq 100`;do

w|grep "wuxiangd" &>/dev/null && echo "wuxiangdong is loggin in" || echo "wuxiangdong is not loggin in"

sleep 5

done          


写一个脚本:

启动服务的选项:只接受参数start,stop,restart,status其中之一

#!/bin/bash

if [ $# -lt 1 ];then

        echo "Usage: `basename $0` {start|stop|restart|status}"

fi

case $1 in

-sta*)

        echo "service start"

        ;;

-stop)

        echo "service stop"

        ;;

-restart)

        echo "service restart"

        ;;

-status)

        echo "service running"

        ;;

*)

        echo "Unknow"

        exit 2

        ;;

esac


写一个脚本:

判断10个随机数中,最大和最小的随机数,并且输出

#!/bin/bash

declare -i MIN=0

declare -i MAX=0

for I in {1..10};do

        MYRANDOM=$RANDOM

        [ $I -eq 1 ] && MIN=$MYRANDOM

        if [ $I -lt 10 ];then

                echo -n "$MYRANDOM ,"

        else

                echo "$MYRANDOM"

        fi

        if [ $MYRANDOM -gt $MAX ];then

                MAX=$MYRANDOM

        fi

        if [ $MYRANDOM -lt $MIN ] ;then

                MIN=$MYRANDOM

        fi

done

echo "The Max is $MAX"

echo "The Min is $MIN"

                

写一个脚本:

通过选项-del -add -v等参数进行删除和增加用户。

#!/bin/bash

#

DEBUG=0

ADD=0

DEL=0

for I in `seq 0 $#`; do

  if [ $# -gt 0 ]; then

 case $1 in

 -v|--verbose)

DEBUG=1

shift ;;

 -h|--help)

echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"

exit 0

;;

 --add)

ADD=1

ADDUSERS=$2

shift 2

;;

 --del)

DEL=1

DELUSERS=$2

shift 2

;;

 *)

echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"

exit 7

;;

    esac

  fi

done


if [ $ADD -eq 1 ]; then

  for USER in `echo $ADDUSERS | sed ‘s@,@ @g‘`; do

    if id $USER &> /dev/null; then

      [ $DEBUG -eq 1 ] && echo "$USER exists."

    else

      useradd $USER

      [ $DEBUG -eq 1 ] && echo "Add user $USER finished."

    fi

  done

fi


if [ $DEL -eq 1 ]; then

  for USER in `echo $DELUSERS | sed ‘s@,@ @g‘`; do

    if id $USER &> /dev/null; then

      userdel -r $USER

      [ $DEBUG -eq 1 ] && echo "Delete $USER finished."

    else

      [ $DEBUG -eq 1 ] && echo "$USER not exist."

    fi

  done

fi



练习:写一个脚本showlogged.sh,其用法格式为:

showlogged.sh -v -c -h|--help

其中,-h选项只能单独使用,用于显示帮助信息;-c选项时,显示当前系统上登录的所有用户数;

如果同时使用了-v选项,则既显示同时登录的用户数,又显示登录的用户的相关信息;如

Logged users: 4.


They are:

root     tty2         Feb 18 02:41

root     pts/1        Mar  8 08:36 (172.16.100.177)

root     pts/5        Mar  8 07:56 (172.16.100.177)

hadoop   pts/6        Mar  8 09:16 (172.16.100.177)


#!/bin/bash

#

declare -i SHOWNUM=0

declare -i SHOWUSERS=0


for I in `seq 1 $#`; do

  if [ $# -gt 0 ]; then

    case $1 in

    -h|--help)

      echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"

      exit 0 ;;

    -v|--verbose)

      let SHOWUSERS=1

      shift ;;

    -c|--count)

      let SHOWNUM=1

      shift ;;

    *)

      echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"

      exit 8 ;;

    esac

  fi

done


if [ $SHOWNUM -eq 1 ]; then

  echo "Logged users: `who | wc -l`."

  if [ $SHOWUSERS -eq 1 ]; then

    echo "They are:"

    who

  fi

fi

写个脚本,按如下方式执行:

mkscript.sh -v|--version VERSION -a|--author AUTHOR -t|--time DATETIME -d|--description DESCRIPTION -f|--file /PATH/TO/FILE -h|--help


1、此脚本能创建或打开-f选项指向的文件/PATH/TO/FILE;

如果其为空文件,能自动为其生成第一行;

如果文件不空,且第一行不是#!/bin/bash,则中止此脚本,并报错“The file is not a bash script.";

否则,则直接使用vim 打开此文件;

提示:/PATH/TO/FILE,要判断其目录是否存在;如果不存在,则报错;


2、如果为空文件,自动生成的第一行内容为:

#!/bin/bash

3、如果为空文件,且使用了-a选项,则在文件中添加“# Author: -a选项的参数”,比如:

# Author: Jerry

4、如果为空文件,且使用了-t选项,则在文件中添加“# Date: 脚本执行-t选项后指定的时间”,比如:

# Date: 2013-03-08 18:05

5、如果为空文件,且使用了-d选项,则在文件中添加“# Description: -d选项的内容”,比如:

# Description: Create a bash script file head.

6、如果为空文件,且使用了-v选项,则在文件添加“# Version: -v后跟的参数”,比如:

# Version: 0.1

6、-h选项只能单独使用,用于显示使用帮助;

7、其它选项,显示帮助信息;

说明:

这是一个用于创建脚本的脚本,它可以自动帮助创建一个bash脚本的文件头,这样,以后使用此脚本来创建其它脚本将变得比较高效。比如:

#!/bin/bash

# Author: Jerry(jerry@magedu.com)

# Date: 2013-03-08 18:05

# Description: Create a bash script file head.

# Version: 0.1

#

实现:

#!/bin/bash

declare -i VERSION=0

declare -i AUTHOR=0

declare -i TIME=0

declare -i DESCRIPTION=0

declare -i FILE=0

for I in `seq $#`;do

        -v|-version)

        VERSION=1

        MYVERSION=$2

        -a|--author)

        AUTHOR=1

        MYAUTHOR=$2

        shift 2

        ;;

        -t|-time)

        TIME=1

        MYTIME=$2

        shift 2

        ;;

        -d|--description)

        DESCRIPTION=1

        MYDESCRIPTION=$2

        shift 2

        ;;

        -f|--file)

        FILE=1

        MYFILE=$2

        shift 2

        ;;

        -h|-help)

                exit 0

        ;;

        *)

        esac

fi

done

#######################################################################################

if [ $FILE -eq 1 ];then

        if [ -e $MYFILE ];then

                MYHEAD=`head -1 $MYFILE`

                if [ "$MYHEAD" == "#!/bin/bash" ];then

                        if [ $AUTHOR -eq 1 ];then

                                echo "#Author:$MYAUTHOR">>$MYFILE

                        fi

                        if [ $TIME -eq 1 ];then

                                echo "#Date:$MYTIME">>$MYFILE

                        fi

                        if [ $DESCRIPTION -eq 1 ];then

                                echo "#Description:$MYDESCRIPTION">>$MYFILE

                        fi

                        if [ $VERSION -eq 1 ];then

                                echo "#Version:$MYVERSION">>$MYFILE

                        fi

                        vim + $MYFILE

                        exit 0

                else

                        echo "The file $MYFILE is not a bash Script!"

                fi

        else

                touch $MYFILE

                echo "#!/bin/bash">>$MYFILE

                if [ $AUTHOR -eq 1 ];then

                        echo "#Author:$MYAUTHOR">>$MYFILE

                fi

                if [ $TIME -eq 1 ];then

                        echo "#Date:$MYTIME">>$MYFILE

                fi

                if [ $DESCRIPTION -eq 1 ];then

                        echo "#Description:$MYDESCRIPTION">>$MYFILE

                fi

                if [ $VERSION -eq 1 ];then

                        echo "#Version:$MYVERSION">>$MYFILE

                fi

                vim + $MYFILE

                exit 0

        fi

fi




本文出自 “技术至上” 博客,谢绝转载!

linux学习笔记四(shell编程二)