(1) case语句:选择结构 case SWITCH in value1) statement ... ;; //双分号结尾。 value2) statement ... ;; *) statement ... ;; esac //esac结尾。 (2) shift参数说明: 执行shift命令后,位置变量($1~$9)中的命令行参数会依次向左传递。 例: #!/bin/bash # DEBUG=0 ADD=0 DEL=0 for I in `seq 0 $#`; do //解释:seqs 1 $# 的意思是从1到$#个数字。 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 //解释:seqs 1 $# 的意思是从1到$#个数字。 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 •调试脚本:bash -x test.sh