分享7个shell脚本实例--shell脚本练习必备

概述

看多shell脚本实例自然就会有shell脚本的编写思路了,所以我一般比较推荐看脚本实例来练习shell脚本。下面分享几个shell脚本实例。

1、监测Nginx访问日志502情况,并做相应动作

假设服务器环境为lnmp,近期访问经常出现502现象,且502错误在重启php-fpm服务后消失,因此需要编写监控脚本,一旦出现502,则自动重启php-fpm服务。

  1. #场景: 
  2. #1.访问日志文件的路径:/data/log/access.log 
  3. #2.脚本死循环,每10秒检测一次,10秒的日志条数为300条,出现502的比例不低于10%(30条)则需要重启php-fpm服务 
  4. #3.重启命令为:/etc/init.d/php-fpm restart 
  5. #!/bin/bash 
  6. ########################################################### 
  7. #监测Nginx访问日志502情况,并做相应动作 
  8. ########################################################### 
  9. log=/data/log/access.log 
  10. N=30 #设定阈值 
  11. while : 
  12. do 
  13.  #查看访问日志的最新300条,并统计502的次数 
  14.     err=`tail -n 300 $log |grep -c '502" '
  15.  if [ $err -ge $N ] 
  16.  then 
  17.  /etc/init.d/php-fpm restart 2> /dev/null 
  18.  #设定60s延迟防止脚本bug导致无限重启php-fpm服务 
  19.      sleep 60 
  20.  fi 
  21.  sleep 10 
  22. done 

2、把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母

1)准备测试文件,文件名为2.txt

  1. 第1行1234567不包含字母 
  2. 第2行56789BBBBBB 
  3. 第3行67890CCCCCCCC 
  4. 第4行78asdfDDDDDDDDD 
  5. 第5行123456EEEEEEEE 
  6. 第6行1234567ASDF 
  7. 第7行56789ASDF 
  8. 第8行67890ASDF 
  9. 第9行78asdfADSF 
  10. 第10行123456AAAA 
  11. 第11行67890ASDF 
  12. 第12行78asdfADSF 
  13. 第13行123456AAAA 

2)脚本如下:

  1. #!/bin/bash 
  2. ############################################################## 
  3. #把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母 
  4. ############################################################## 
  5. sed -n '1,5'p 2.txt |sed '/[a-zA-Z]/'
  6. sed -n '6,10'p 2.txt |sed s'/[a-zA-Z]//'
  7. sed -n '11,$'p 2.txt 
  8. #最终结果只是在屏幕上打印结果,如果想直接更改文件,可将输出结果写入临时文件中,再替换2.txt或者使用-i选项 

分享7个shell脚本实例--shell脚本练习必备3、用shell打印示例语句中字母数小于6的单词

  1. #示例语句: 
  2. #Bash also interprets a number of multi-character options. 
  3. #!/bin/bash 
  4. ############################################################## 
  5. #shell打印示例语句中字母数小于6的单词 
  6. ############################################################## 
  7. for s in Bash also interprets a number of multi-character options. 
  8. do 
  9.  n=`echo $s|wc -c` 
  10.  if [ $n -lt 6 ] 
  11.  then 
  12.  echo $s 
  13.  fi 
  14. done 

4、输入数字运行相应命令

  1. #!/bin/bash 
  2. ############################################################## 
  3. #输入数字运行相应命令 
  4. ############################################################## 
  5. echo "*cmd menu* 1-date 2-ls 3-who 4-pwd 0-exit " 
  6. while : 
  7. do 
  8. #捕获用户键入值 
  9.  read -p "please input number :" n 
  10.  n1=`echo $n|sed s'/[0-9]//'g` 
  11. #空输入检测  
  12.  if [ -z "$n" ] 
  13.  then 
  14.  continue 
  15.  fi 
  16. #非数字输入检测  
  17.  if [ -n "$n1" ] 
  18.  then 
  19.  exit 0 
  20.  fi 
  21.  break 
  22. done 
  23. case $n in 
  24.  1) 
  25.  date 
  26.  ;; 
  27.  2) 
  28.  ls 
  29.  ;; 
  30.  3) 
  31.  who 
  32.  ;; 
  33.  4) 
  34.  pwd 
  35.  ;; 
  36.  0) 
  37.  break 
  38.  ;; 
  39.     #输入数字非1-4的提示 
  40.  *) 
  41.  echo "please input number is [1-4]" 
  42. esac 

5、创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字,最后需要把每个用户的密码存在指定文件中

  1. #!/bin/bash 
  2. ############################################################## 
  3. #创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字 
  4. #最后需要把每个用户的密码存在指定文件中 
  5. #前提条件:安装mkpasswd命令 
  6. ############################################################## 
  7. #生成10个用户的序列(00-09) 
  8. for u in `seq -w 0 09` 
  9. do 
  10.  #创建用户 
  11.  useradd user_$u 
  12.  #生成密码 
  13.  p=`mkpasswd -s 0 -l 10` 
  14.  #从标准输入中读取密码进行修改(不安全) 
  15.  echo $p|passwd --stdin user_$u 
  16.  #常规修改密码 
  17.  echo -e "$p\n$p"|passwd user_$u 
  18.  #将创建的用户及对应的密码记录到日志文件中 
  19.  echo "user_$u $p" >> /tmp/userpassword 
  20. done 

6、监控httpd的进程数,根据监控情况做相应处理