且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Linux Bash脚本练习4 : 脚本选项进阶

更新时间:2022-10-02 16:33:43

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.我写的脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/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 
   for 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 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更加简洁。


本文转自zfz_linux_boy 51CTO博客,原文链接:http://blog.51cto.com/zhangfengzhe/1428414,如需转载请自行联系原作者