欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

[Intern][2019.03.20]Linux Shell 执行传参数和expr

程序员文章站 2022-07-07 21:50:27
前不久入职实习生,现在在帮着组里面dalao们跑Case,时不时要上去收一下有木有Dump,每次敲命令太烦人于是逼着自己学写Shell脚本。一开始真的是很痛苦啊,也没能搞到书,只能凭网上半真半假的消息照葫芦画瓢!废话少说,上正文! 我是分割线 就是这样子,在想到什么就再往上面丢点什么吧! ......

前不久入职实习生,现在在帮着组里面dalao们跑case,时不时要上去收一下有木有dump,每次敲命令太烦人于是逼着自己学写shell脚本。一开始真的是很痛苦啊,也没能搞到书,只能凭网上半真半假的消息照葫芦画瓢!废话少说,上正文!

=========================我是分割线=========================

 1 clear
 2 
 3 echo "check_dump is a tool help you check dumps"
 4 
 5 numberofsps=2
 6 commands="-lcd"
17 ###########################################################
18 #                                                          
19 #   getopts 命令是 korn/posix shell 的内置命令              
20 #   ,用来从参数列表检索选项以及选项参数。选项由一个+(加号)
21 #   或者是由一个-(减号)后跟一个字符开始。一个既不是以+,也不
22 #   是以-开始的选项结束选项字符串。每次调用 getopts 命令时,它
23 #   将下一个选项的值放置在 name 内,并将下一个要处理的参数的索引
24 #   置于 shell 变量 optind 中。每当调用 shell 时,都会将
25 #   optind 初始化为 1。当选项以 + 开头时,会将 + 预
26 #   追加到 name 中的值。
27 #
28 ##########################################################
29 
30 while getopts ":a:b:c:n:" opt   # 如果选项字符串中的字符后面带有“:”(冒号),那么预期此选项将带有参数。
31                                 # 在这里a前面有没有冒号会决定下面的*/?能不能起效
32                                 # 详细的说明可以参考 https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_71/com.ibm.aix.cmds2/getopts.htm
33 do
34 case $opt in 
35     a)
36     d1=$optarg                                      # 当选项需要选项参数时,getopts 命令就将其置于变量 optarg 中
37     echo "d1 is $d1 "
38     ;;                                              # 一定要记得加上末尾的;;,相当于其它语言的 break
39     b)
40     d2=$optarg                                      # optarg 出现了,他就是取得参数的具体地方
41     echo "d2 is $d2, and destination is $d1.$d2"    # shell 里面的变量很有意思,直接这样写就能顺着输出出来
42     ;;                                              # 双引号会解析字符串里面的转义字符和变量名,单引号不会
43     c)
44     commands=$optarg
45     echo " addtional command: $commands "
46     ;;
47     n)
48     numberofsps=$optarg
49     echo "number of sps has changed to $numberofsps "
50     ;;
51     *)                                              # * 或者 ? 匹配所有不是上面列出的东东
52     echo "usage: check_dump -a<xxx.xxx.xxx> -b<xxx> -c<commands> -n<number of sp>
53 and the destination is ip for unisphere."
54     exit
55 esac
56 done
57 
58 i=1
59 while [ $i -le $numberofsps ]
60 do
61 d2=$((d2+1))
62 destination="$d1.$d2"
63 echo "============================================= 
64 checking sp$i, destination is :$destination"        # 很有趣吧,直接在字符串里面换行,打印输出内容也会换行!
65 i=$((i+1))                                          # $(()) 和 下面的 ``是一样的,表示里面的东东可以执行,需要执行以后再做其他操作
66 res="`ssh $destination svc_dc $commands`" 
67 if [[ ${#res} == 234 ]];then                        # 比较应该深度学习的“expr指令”的缩写版本,原版有些指令少而不太好使
68                                                     # 看到if后面跟的什么了没!!!!";then""五个字符一个不能少!
69 echo "no dumps"
70 else                                                # 分支比较多的话还可以选择用elif[[ condition ]];then 
71 echo "found dumps:
72 $res"
73 fi
74 
75 done
76 exit

就是这样子,在想到什么就再往上面丢点什么吧!