面向過程中的控制結構
順序結構
選擇結構
單分支的if語句
雙分支的if語句
多分支的if語句
case語句
case SWITCH in
value1)
statement
...
;;
value2)
statement
....
;;
*)
statement
...
;;
esac
循環結構
如寫一腳本,測試用戶從鍵盤輸入的字符是數字還是字符
[root@station01 ~]# cat case.sh #/bin/bash # case $1 in [0-9]) echo "$1 is a digit.";; [a-z]) echo "$1 is a lower.";; [A-Z]) echo "$1 is a Upper.";; *) echo "Unknow.";; esac
寫一腳本,接收用戶參數start,stop,restart,status之一
[root@station01 ~]# cat case1.sh #/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
[root@station01 ~]# cat debug.sh #!/bin/bash # DEBUG=0 case $1 in -v|--verbose) DEBUG=1 ;; *) echo "Uknown options" exit 7 ;; esac [ $DEBUG -eq 1 ] && echo "heloo"
[root@station01 ~]# cat ./adminuser.sh #!/bin/bash # DEBUG=0 case $1 in -v|--verbose) DEBUG=1 ;; esac useradd tom &>/dev/null [ $DEBUG -eq 1 ] && echo "User add finished."寫一腳本,通過選項及參數傳遞,管理系統用戶
[root@station01 ~]# cat adminuser2.sh #!/bin/bash # DEBUG=0 ADD=0 DEL=0 for I in `seq 1 $#`;do if [ $# -gt 0 ];then case $1 in -v|--verbose) DEBUG=1 shift ;; -h|--help) echo "Usage:`basename $0` --add USERLIST --del USERLIST -v|--verbose -h|--help" exit 0 ;; --add) ADD=1 ADDUSER=$2 shift 2 ;; --del) DEL=1 DELUSER=$2 shift 2 ;; *) echo "Usage:`basename $0` --add USERLIST --del USERLIST -v|--verbose -h|--help" exit 9 ;; esac fi done if [ $ADD -eq 1 ];then for USER in `echo $ADDUSER | sed 's@,@ @g'`;do if id $USER &>/dev/null;then [ $DEBGU -eq 1 ] && echo "$USER exist." else useradd $USER [ $DEBUG -eq 1 ] && echo "Add user $USER finished." fi done fi if [ $DEL -eq 1 ];then for USER in `echo $DELUSER | 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 "No such $USER ." fi done fi
寫一腳本,顯示系統登錄用戶數及詳細的登錄信息,其中-h選項只能單獨使用,用於顯示幫助信息;-c選項用於顯示登錄數;如同時使用了-v選項時,既顯示用戶的登錄數又顯示登錄用戶的相關信息
[root@station01 ~]# cat logged.sh #!/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 -v|verbose -c -h|--help" exit 0 ;; -c|--count) SHOWNUM=1 shift ;; -v|verbose) SHOWUSERS=1 shift ;; *) echo "Usage:basename $0 -v|verbose -c -h|--help" exit 9 ;; esac fi done if [ $SHOWNUM -eq 1 ];then echo "Logged user:`who | wc -l`." if [ $SHOWUSERS -eq 1 ];then echo "They are:" who fi fi