|
22、bash脚本编程之五 case语句及脚本选项进阶
2021年07月23日 |
|
22.1 选择结构: 1、if语句 单分支、 if: if CONDITION; then statement … fi 双分支、 if CONDITION; then statement … else statement … fi 多分支 if CONDITION1; then statement … elif CONDITION2; then statement … esle statement … fi 2、case语句:选择结构 case SWITCH in value1) statement … ;; value2) statement .. ;; *) statement … ;; esac 例1 a-z A-Z 0-9 [abc] 输出不同的对应结果 #!/bin/bash # case $1 in [A-Z]) echo “upper”;; [a-z]) echo “lower”;; [0-9]) echo “number”;; *) echo “wrong input”;; esac 例2 只识别参数start,stop,restart,status其中之一 #!/bin/bash # case $1 in start) echo start;; stop) echo stop;; restart) echo restart;; status) echo status;; *) echo “The usage is `basename $0` {start|stop|restart|status}”;; esac 例3 写一个脚本,可以接受选项及参数,而后能获取每一个参数,及选项的参数,并能根据选项做出特定的操作,比如 adminusers.sh –add tom.jerry –del tom,jerry -v|–verbose -h|–help #!/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 例4 练习:写一个脚本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 |