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更加简洁。