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 ~~