30个关于Shell脚本的经典案例(上)

  <强>对于初学者而言,因为没有实战经验,写不出来的Shell脚本很正常,如果工作了几年的运维老年还是写不出来,那就是没主动找需求,缺乏练习,缺乏经验针。对以上问题,总结了30个生产环境中经典的Shell脚本,通过这些需求案例,希望能帮助大家提升壳编写思路,掌握编写技巧。

<强>先了解下编写壳过程中注意事项:

<>以前开头加解释器:# !/bin/bash   语法缩进,使用四个空格;多加注释说明。   命名建议规则:变量名大写,局部变量小,写函数名小写,名字体现出实际作用。   默认变量是全局的,在函数中变量当地指定为局部变量,避免污染其他作用域。   有两个命令能帮助我调试脚本:设置- e遇到执行非0时退出脚本,集合x打印执行过程。   写脚本一定先测试再到生产上。

<强> 1,获取随机字符串或数字

<>之前获取随机8位字符串:   方法1:   # echo $随机md5sum | | - c 1 - 8   471年b94f2   方法2:   # openssl兰德base64 4   vg3BEg==第三方法:   #猫/proc/sys/kernel/random/uuid | - c 1 - 8   ed9e032c      获取随机8位数字:   方法1:   # echo $随机|校验和| - c 1 - 8   23648321   方法2:   # openssl兰德base64 4 |校验和| - c 1 - 8   38571131   第三方法:   #日期+ % N | - c 1 - 8   69024815      校验和:打印CRC效验和统计字节

<强> 2,定义一个颜色输出字符串函数

方法1:
  函数echo_color () {
  如果(1美元==奥躺?;然后
  回声033 - e " \[32; 40米033美元\ [0 m”
  elif(1美元==昂焐?;然后
  回声033 - e " \[31; 40米033美元\ [0 m”
  fi
  }
  方法2:
  函数echo_color () {
  案例1美元
  绿色)
  echo - e”[32; 40米2美元[0 m”
  ;;
  红色)
  echo - e”[31; 40米2美元[0 m”
  ;;
  *)
  回声”的例子:echo_color红色字符串”
  esac
  }
  
  使用方法:echo_color绿色“测试”
  
  函数关键字定义一个函数,可加或不加。

<强> 3批量创建用户

 # !/bin/bash=$日期(日期+ % f % T)
  USER_FILE=. txt
  echo_color () {
  如果(1美元==奥躺?;然后
  echo - e”[32; 40米2美元[0 m”
  elif(1美元==昂焐?;然后
  echo - e”[31; 40米2美元[0 m”
  fi
  }
  #如果用户文件存在并且大小大于0就备份
  如果(- s USER_FILE美元);然后
  mv USER_FILE {USER_FILE} -美元${日期}. bak
  echo_color绿色”USER_FILE美元存在,重命名{USER_FILE} -{日期}. bak美元”
  fi
  echo - e“用户密码”在祝辞USER_FILE美元
  回声”- - - - - - - - - - - - - - - - -“在祝辞USER_FILE美元
  为用户在用户{1 . . 10};做
  如果!$ USER id,在/dev/null;然后
  通过=$ (echo $随机md5sum | |削减- c 1 - 8)
  useradd $ USER
  回声过去| passwd——stdin美元用户,在/dev/null
  echo - e“用户通过美元”在祝辞USER_FILE美元
  回声“$ USER用户创建成功。”
  其他的
  echo_color红”$ USER用户已经存在!”
  fi
  以前做 

<>强4、检查软件包是否安装

 # !/bin/bash
  如果rpm - q sysstat,在/dev/null;然后
  回声“sysstat已经安装”。
  其他的
  回声“sysstat没有安装!”
  fi 

<强> 5,检查服务状态

 # !/bin/bash
  PORT_C=$ (ss阿奴| grep - c 123)
  PS_C=$ (ps ef | grep ntpd | grep vc grep)
  如果[$ PORT_C eq 0 - o $ PS_C eq 0];然后
  回声”内容”|邮件- s”主题“dst@example.com
  fi 

<>强6日检查主机存活状态

方法1:将错误IP放到数组里面判断是否平失败三次
  # !/bin/bash
  IP_LIST=" 192.168.18.1 192.168.1.1 192.168.18.2 "
  对IP IP_LIST美元;做
  NUM=1
  而(NUM勒3美元);做
  如果ping - c 1 $ IP祝辞/dev/null;然后
  echo " $ IP Ping成功。”
  打破
  其他的
  #回声“IP Ping失败NUM美元”
  FAIL_COUNT (NUM美元)=$ IP
  让NUM + +
  fi
  完成
  如果($ {# FAIL_COUNT [*]} eq 3];
  回声“$ {FAIL_COUNT [1]} Ping失败!”
  设置FAIL_COUNT [*]
  fi
  完成
  
  方法2:将错误次数放到FAIL_COUNT变量里面判断是否平失败三次
  # !/bin/bash
  IP_LIST=" 192.168.18.1 192.168.1.1 192.168.18.2 "
  对IP IP_LIST美元;做
  FAIL_COUNT=0
  ((我=1;i<=3;我+ +));做
  如果ping - c 1 $ IP在/dev/null;然后
  echo " $ IP Ping成功。”
  打破
  其他的
  #回声“IP Ping失败我美元”
  让FAIL_COUNT + +
  fi
  完成
  如果[$ FAIL_COUNT eq 3];然后
  echo " $ IP Ping失败! "
  fi
  完成
  
  方法3:利用的循环将ping通就跳出循环继续,如果不跳出就会走到打印平失败
  # !/bin/bash
  ping_success_status () {
  如果ping - c 1 $ IP在/dev/null;然后
  echo " $ IP Ping成功。”
  继续
  fi
  }
  IP_LIST=" 192.168.18.1 192.168.1.1 192.168.18.2 "
  对IP IP_LIST美元;做
  ping_success_status
  ping_success_status
  ping_success_status
  echo " $ IP Ping失败! "
  以前做

30个关于Shell脚本的经典案例(上)