详解LinuxShell脚本编写技巧附实例说明

2019-08-16 15:24:43  阅读:5283 作者:赛虎学院

原标题:详解Linux Shell脚本编写技巧,附实例阐明

Linux Shell是一个很难的常识板块。尽管咱们都仔细学,根本的语法很都把握,但有需求时,很难直接上手编程,要么写了好久,要么写欠好!关于初学者而言,由于没有实战经历,写不出来Shell脚本很正常,假如工作了几年的运维仍是写不出来,那便是没自动找需求,缺少操练,缺少经历。

办法关键

简略介绍一下编写shell脚本的时分的经历和办法。

  • 理清思路:在咱们想完成一个功用需求写脚本的时分是切忌不要想到就写,防止需求什么功用就先写个什么指令再去完善,这种写法常常会呈现在结构上很难调整的问题。在咱们开端写脚本之前一定要事前理清楚要怎样去完成这个功用,包含用什么指令和指令的先后顺序。
  • 大局观:当咱们理清脚本的思路之后,咱们这个时分也不能立刻就开端写,这个时分咱们需求在脑海中考虑每一个进程中或许呈现的状况,当呈现各种状况后怎么应对。在shell脚本中有或许咱们要完成一个看似简略的功用会需求有多个条件判别,由于呈现在咱们当时体系上的状况只是在很多状况中的一种,咱们要完成让脚本在任何机器上都能正常运转就必须有“大局观”。浅显讲便是一个扫除bug的进程。
  • 心细如丝:正如咱们慨叹的相同,shell脚本有十分多的引号括号空格,每一种含义不相同,多个空格少个空格含义又不相同,写个几十行的shell脚天性一次性写完就无错运转仍是有一些难度的。我的在学习shell脚本一开端就强行给自己养成一个习气,每写完一行就查看一次各种符号括号,刚开端速度十分慢,可是写得多了速度就越来越快并且犯错率也越来越低,当养成习气今后再去写那些符号就成了习气没有刚开端那么痛苦了。
  • 好记忆不如烂键盘:有一句欠好听的话尽管欠好听,可是能提示到一些正在学习shell脚本的朋友说出来也挺好。当你在诉苦shell脚本怎么难写怎么易犯错的时分那么你一共写过多少行shell?你敲过多少次键盘?

下面共享几个shell脚本实例做操练。

1. 检测服务器是否敞开web服务(监听80),并判别服务品种

  1. #!/bin/bash
  2. ####################################################
  3. #检测服务器是否敞开web服务(监听80),并判别服务品种
  4. ####################################################
  5. #捕获监听80端口的服务称号
  6. netstat -lntp|grep ":80"|awk -F '/' '{print $2}'|sort|uniq > /tmp/80.log
  7. n=`wc -l /tmp/80.log|awk '{print $1}'`
  8. s1=`cat /tmp/80.log`
  9. #判别服务品种函数
  10. judge_server()
  11. {
  12. case $1 in
  13. httpd)
  14. echo "this server is apache"
  15. ;;
  16. nginx)
  17. echo "this server is nginx"
  18. ;;
  19. tomcat)
  20. echo "this server is tomcat"
  21. ;;
  22. *)
  23. echo "this server is other"
  24. ;;
  25. esac
  26. }
  27. if [ $n -eq 0 ]
  28. then
  29. echo "no web server!"
  30. exit
  31. fi
  32. if [ $n -eq 1 ]
  33. then
  34. judge_server $s1
  35. else
  36. echo "there are $n web servers"
  37. for web in `cat /tmp/80.log`
  38. judge_server $web
  39. fi

2. 检测MySQL服务是否正常,判别是主库仍是从库,如是从库判别主从服务是否正常

  1. #!/bin/bash
  2. ##################################################################
  3. #检测MySQL服务是否正常,判别是主库仍是从库,如是从库判别主从服务是否正常
  4. ##################################################################
  5. mysqlcmd="mysql -uroot -p123456"
  6. #判别MySQL服务是否正常(正确履行MySQL指令)
  7. $mysqlcmd -e "show processlist"
  8. if [ $? -gt 0 ]
  9. then
  10. echo "this mysql is wrong."
  11. else
  12. #假如是从库则有返回值
  13. $mysqlcmd -e "show slave statusG" > /tmp/sql.log
  14. n=`wc -l /tmp/sql.log|awk '{print $1}'`
  15. if [ $n -gt 0 ]
  16. then
  17. y1=`grep 'Slave_IO_Running:' /tmp/sql.log`|awk -F ':' '{print $2}'|sed 's/ //g'`
  18. y2=`grep 'Slave_SQL_Running:' /tmp/sql.log`|awk -F ':' '{print $2}'|sed 's/ //g'`
  19. if [ $y1 == "yes" ] && [ $y2 == "yes" ]
  20. then
  21. echo "the slave is ok"
  22. else
  23. echo "the slave is wrong"
  24. fi
  25. fi
  26. fi

3. 核算100以内一切能被3整除的正整数的和

  1. #!/bin/bash
  2. #############################################
  3. #核算100以内一切能被3整除的正整数的和
  4. ############################################
  5. sum=0
  6. for i in {1..100}
  7. do
  8. #求余数
  9. n=$[$i%3]
  10. if [ $n -eq 0 ]
  11. then
  12. sum=$[$sum+$i]
  13. fi
  14. done
  15. echo "sum:$sum"

4. 核算内存运用

  1. #!/bin/bash
  2. #############################################
  3. #核算100以内一切能被3整除的正整数的和
  4. ############################################
  5. sum=0
  6. for i in {1..100}
  7. do
  8. #求余数
  9. n=$[$i%3]
  10. if [ $n -eq 0 ]
  11. then
  12. sum=$[$sum+$i]
  13. fi
  14. done
  15. echo "sum:$sum"

责任编辑:

相关阅读
进口中成药“和胃整肠丸”以同名同方药注册获批 实现本土化生产

进口中成药“和胃整肠丸”以同名同方药注册获批 实现本土化生产

2026年5月21日,广东泰恩康医药股份有限公司全资子公司安徽泰恩康制药有限公司正式获得国家药品监督管理局签发的和胃整肠丸《药

“杨定一博士理念生活节暨《走向心的道路》新书发布会”在京成功举办

“杨定一博士理念生活节暨《走向心的道路》新书发布会”在京成功

近日,“杨定一博士理念生活节暨《走向心的道路》新书发布会”在北京成功举行。本次活动由北京颉腾文化传媒有限公司主办,并得到

高温天耳鼻喉“警报”拉响!这份防护指南请收好!

高温天耳鼻喉“警报”拉响!这份防护指南请收好!

夏日炎炎 作死三连:1、空调房反复横跳:屋外烤串屋内速冻,鼻子当场 “水土不服”,喷嚏打得像机关枪2、冷饮吨吨吨自由:冰奶茶灌到

禹爽院长在中南大MBA毕业典礼发言并获“优秀指导教师”荣誉

禹爽院长在中南大MBA毕业典礼发言并获“优秀指导教师”荣誉

2025年7月5日上午,中南财经政法大学工商管理学院(MBA教育中心)2025年MBA/EMBA毕业典礼暨学位授予仪式在首义校区文汇楼报告厅隆重