shell 编程实战

书写想法:

工作流程中,有个shell写的脚本,400多行,看完一脸懵逼,这尼玛是啥??

于是找来资料,开始学习shell编程理论

只看理论不实践,早晚忘光光,决定动手写一个小的且可用于工作中的小脚本。

 

正式代码:

 1 #!/bin/bash
 2 
 3 # 验收shell学习成果
 4 # 增加查询其他用户
 5 
 6 clear 
 7 
 8 echo -e "\033[32m\n地球是圆的,而看似像终点的地方可能也只是起点。\n \033[0m"
 9 
10 function get_job_id() {
11     if [ $user ];then
12         ids=$(qstat -u ${user} |  less  | cut -d  " " -f1  | sed -n  '3,$p')
13     else
14         ids=$(qstat  |  less  | cut -d  " " -f1  | sed -n  '3,$p')
15         
16     fi
17 
18     testhead=$(echo $ids | tr " " "\n" | head -1)
19 
20     if [ $testhead ];then
21         num=$(echo ${ids} | tr " " "\n" | wc -l )
22     else 
23         num=0
24     fi
25 }
26 
27 
28 function get_id_info() {
29     shell=$(qstat  -j  ${id}    | grep  job_args | awk -F " " '{print $NF}')
30     usage=$(qstat  -j ${id}    | grep  usage | awk -F " " '{print $3,$4,$5,$6,$7,$8,$9,$10}')
31     if [ ! $shell ];then
32         shell=$(qstat  -j  ${id}    | grep  script_file | awk -F " " '{print $NF}')
33     fi
34 
35     echo -e """
36     \033[36mshell: \033[34m${shell}
37     \033[36musage: \033[33m${usage}
38     \033[0m"""
39 
40 }
41 
42 function print_hello() {
43     if [ ! $user ];then
44         user=$(who am i | cut -d " " -f1)
45     fi
46     echo -e "\033[36mhello $user, 世界在你想象\033[0m\n"
47 }
48 
49 print_hello
50 
51 while getopts ":i:u:ahs" opt;do
52     case $opt in 
53     i)
54         id=$OPTARG
55         get_id_info
56         ;;
57     s)
58         get_job_id
59         echo -e """\033[31m目前一共有 ${num} job在运行中\033[0m"
60         echo  "ids名称:" $ids
61         ;;
62     a)
63         get_job_id
64         n=1
65         for id in $ids;do
66             echo -e """\033[31m>>> ${n}\t${id}\033[0m"""
67             get_id_info
68             n=`expr ${n} + 1`
69         done
70         ;;
71     u)
72         user=$OPTARG
73         echo "查询用户: "$user
74         ;;
75     h)
76         echo -e '''\033[32m
77          Usage: 查询目前正在运行的job信息
78 
79          qstatcheck -s : 展示目前哪些jobid正在运行中
80          qstatcheck -i jobid : 展示具体id的简略信息
81          qstatcheck -a : 展示目前所有job的简略信息
82          
83          展示指定用户的job信息:
84          qstatcheck -u aaa -s 
85          qstatcheck -u aaa -i jobid
86          qstatcheck -u aaa -a
87 
88         '''
89     esac
90 done

 

代码简单介绍:

1.shell 函数

2.shell if条件判断

3.shell while循环

4.shell case in用法

5.shell 的 getopts命令(有python经验的同学,可以类比argparse)

 

差不多学到的东西都用上啦。。。。。。

一点小tips:

shell 编程没有python那种严格的缩进(区域代码块)

但是他有自己的风格:

if .. fi

case .. esac

 

发现没,就是正着写一遍,反着写一遍 。。

 

shell 编程分享完啦,欢迎交流。。。

喔,展示下装逼的显示:

 

 现在知道ls -l 的参数是咋来的啦。。。。

 

bye ~~

 

posted @ 2020-05-21 12:05  遗世独立的愚公  阅读(204)  评论(0编辑  收藏  举报