1.任务描述
写一个脚本,可以接受选项和参数,并能根据选项和参数做出特定操作。如: adminusers.sh --add tom,jerry adminusers.sh --del tom,blair adminusers.sh -v|--verbose --add tom,jerry adminusers.sh -v|--verbose --del tom,blair adminusers.sh -h|--help |
2.我写的脚本如下:
#!/bin/bash info="Usage `basename $0` --add USER1,USER2,... | --del USER1,USER2,... [-v|--verbose] | [-h|--help]" if [ $# -lt 1 ] ; then echo $info exit 7 fi declare -i verboseFlag=0 case $1 in -h|--help) echo $info exit 7 ;; -v|--verbose) verboseFlag=1 shift ;; esac case $1 in --add) [ -z $2 ] && echo $info && exit 8 for i in `echo $2 | sed 's/,/ /gi'` ; do if ! id $i &>/dev/null ; then useradd $i [ $verboseFlag -eq 1 ] && echo "add $i success" else [ $verboseFlag -eq 1 ] && echo "$i is exits" fi done ;; --del) [ -z $2 ] && echo $info && exit 8 for i in `echo $2 | sed 's/,/ /gi'` ; do if ! id $i &>/dev/null ; then [ $verboseFlag -eq 1 ] && echo "no such user : $i" else userdel -r $i [ $verboseFlag -eq 1 ] && echo "delete user : $i success" fi done ;; esac |
3.心得
第一,以前使用LINUX的命令,很多都带有-v选项,用于显示详细信息。现在我也可以来实现这种VERBOSE功能。其实就是一个标志,决定是否进行信息输出的。【要知道LINUX的思想是没有消息就是好消息!】 第二,由于选项之间可以组合,比如-v和--add。如果不出现-v呢?在上面的脚本中,使用到了shift。如果有-v,那么设定标志,同时shift,为后面的CASE流程准备位置变量。 第三,有些时候,CASE写法较IF更加简洁。 |
转载于:https://blog.51cto.com/zhangfengzhe/1428414