一、编程

   1、面向过程:

       a)控制结构

       b)顺序结构

       c)选择结构,if: 单分支、双分支、多分支,case语句;

       d)循环结构;

二、case语句

   1、使用格式:

       case SWITCH in

       value1)

           statement

           ...

           ;;

       value2)

           statement

           ...

           ;;

       *)

           statement

           ...

           ;;

       esac

   如:传递一个参数,来判断输入内容的类型;

#!/bin/bash

#

case $1 in

[0-9])

echo "A digit."

[a-z])

echo "Lower."

[A-Z])

echo "Upper."

*)

echo "Special character."

esac

练习1:写一个脚本

   只接受参数start,stop,restart,status其中之一,如果输入其他则显示此脚本用法帮助;

参考答案:

#!/bin/bash

#

case $1 in

'start')

       echo "start server ...";;

'stop')

       echo "stop server ...";;

'restart')

       echo "restart server ...";;

'status')

       echo "running ...";;

*)

       echo "`basename $0` {start|stop|restart|status}.";;

esac

练习2:写一个脚本

   可以接受选项及参数,而后能获取每一个选项,及选项的参数;并能根据选项及参数做出特定的操作。

比如:adminusers.sh --add tom,jerry --del tom,blair -v|--verbose -h|--help

参考答案:

[root@localhost ~]# vim adminusers3.sh

#!/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

练习3,写一个脚本showlogged.sh:

   其用法格式为:showlogged.sh -h|--help -c|--count -v|--verbose,其中,-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)

参考答案:

[root@localhost ~]# vim showlogged.sh

#!/bin/bash

#

SHOWNUM=0

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)

                       SHOWUSERS=1

                       shift;;

               -c|--count)

                       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