Linux脚本学习必经之路:Shell脚本实例分享

写shell脚本还是一样,思路第一,语法其次,下面分享几个脚本实例,大家主要是理解一下里面的思路,语法稍微注意一下。

1. 观察数字,输出包含前6个数字在内的16个数字

观察以下数字,看有什么规律:

  1. 10 31 53 77 105 141 

这里数字的规律在于两个数字的差值的差值是2的幂次方

那么怎么用shell脚本实现需求呢?

  1. #!/bin/bash 
  2. ############################################### 
  3. #10 31 53 77 105 141 
  4. #观察数字,输出包含前6个数字在内的16个数字 
  5. #数字的规律在于两个数字的差值的差值是2的幂次方 
  6. ############################################### 
  7. a=10 
  8. b=21 
  9. echo $a 
  10. for i in `seq 0 13` 
  11. do 
  12.  #2的$i次幂 
  13.     c=$[2**$i] 
  14.  a=$[$a+$b] 
  15.  b=$[$b+$c] 
  16.  echo $a 
  17. done 
  18. a=$[$a+$b] 
  19. echo $a 

Linux脚本学习必经之路:Shell脚本实例分享

输出结果:

Linux脚本学习必经之路:Shell脚本实例分享

2. 查看Linux系统中是否存在自定义用户,并统计自定义用户数量

  1. #!/bin/bash 
  2. ########################################################## 
  3. #查看Linux系统中是否存在自定义用户,并统计自定义用户数量 
  4. #截取/etc/passwd文件中第三段的数字,大于1000者即为自定义用户 
  5. ########################################################## 
  6. n=`awk -F ':' '$3>1000' /etc/passwd|wc -l` 
  7. if [ $n -gt 0 ] 
  8.  then 
  9.  echo "there are $n custom users" 
  10.  else 
  11.  echo "no custom user" 
  12. fi 

结果输出:

Linux脚本学习必经之路:Shell脚本实例分享

3. 监控磁盘分区以及inode使用率并告警

  1. #!/bin/bash 
  2. ################################################################ 
  3. #监控所有磁盘分区以及inode使用率,当某个分区容量或inode使用量大于85%时,发送邮件告警 
  4. ################################################################ 
  5. #将系统语言设置为英文,如果是中文则会产生bug 
  6. LANG=en 
  7. log=/tmp/`date +%F.log` 
  8. tag1=0 
  9. tag2=0 
  10. df -h >> $log 
  11. df -i >> $log 
  12. #遍历各个磁盘利用率的数值 
  13. for h in `df -h|grep -v 'Use'|awk -F ' +|%' '{print $5}'` 
  14. do 
  15.  if [ $h -gt 85 ] 
  16.  then  
  17.  $tag1=1 
  18.  fi 
  19. done 
  20. #遍历各个磁盘inode的数值 
  21. for i in `df -i|grep -v 'Use'|awk -F ' +|%' '{print $5}'` 
  22. do 
  23.  if [ $i -gt 85 ] 
  24.  then 
  25.  $tag2=1 
  26.  fi 
  27. done 
  28. #磁盘空间以及inode都没有问题,tag=0 
  29. if [ $tag1 -eq 0 ] && [ $tag2 -eq 0 ] 
  30.  then  
  31.  tag=0 
  32. fi 
  33. #磁盘空间有问题,inode没有问题,tag=1 
  34. if [ $tag1 -eq 1 ] && [ $tag2 -eq 0 ] 
  35.  then 
  36.  tag=1 
  37. fi 
  38. #磁盘空间没有问题,inode有问题,tag=2 
  39. if [ $tag1 -eq 0 ] && [ $tag2 -eq 1 ] 
  40.  then 
  41.  tag=2 
  42. fi 
  43. #磁盘空间以及inode都有问题,tag=3 
  44. if [ $tag1 -eq 1 ] && [ $tag2 -eq 1 ] 
  45.  then 
  46.  tag=3 
  47. fi 
  48. #根据不同的tag数值,最终输出不同的结果 
  49. case $tag in 
  50.  0) 
  51.  echo "no problem." 
  52.  ##mail.py 
  53.  ;; 
  54.  1) 
  55.  echo "disk space is not enough." 
  56.  ##mail.py  
  57.  ;; 
  58.  2) 
  59.  echo "disk inode is not enough." 
  60.  ##mail.py 
  61.  ;; 
  62.  3) 
  63.  echo "disk space and disk inode are not enough." 
  64.  ##mail.py 
  65.  ;; 
  66. esac 

Linux脚本学习必经之路:Shell脚本实例分享

Linux脚本学习必经之路:Shell脚本实例分享

输出结果:

Linux脚本学习必经之路:Shell脚本实例分享

4. 监测目标目录的文件生成情况

需求:用脚本每隔5分钟监测目标目录是否有新文件生成,若有新文件生成,则将新文件的列表输出到一个按年、月、日、时、分为名字的日志里。

实现:

  1. #!/bin/bash 
  2. ################################################################## 
  3. #用脚本每隔5分钟监测目标目录是否有新文件生成,若有新文件生成,则将新文件 
  4. #列表输出到一个按年、月、日、时、分为名字的日志里 
  5. ################################################################## 
  6. a=`date -d "-5 min" +%Y-%m-%d-%H-%M` 
  7. logfile=/tmp/$a.log 
  8. basedir=/home 
  9. #查找修改时间少于5分钟的文件,并将列表记录在临时文件中 
  10. find $basedir/ -type f -mmin -5 > /tmp/test.txt 
  11. n=`cat /tmp/test.txt|wc -l` 
  12. if [ $n -gt 0 ] 
  13.  then  
  14.  mv /tmp/test.txt $logfile 
  15. fi 

Linux脚本学习必经之路:Shell脚本实例分享

Linux脚本学习必经之路:Shell脚本实例分享

5. 查看常用命令,并列出TOP10

  1. #!/bin/bash 
  2. #################################### 
  3. #对历史命令排序|查重|倒叙排列|取前10行 
  4. #################################### 
  5. sort /root/.bash_history|uniq -c|sort -nr|head 

Linux脚本学习必经之路:Shell脚本实例分享