if条件语句

单分支结构
if判断也可以用(())里面用> == < 之类的判断
if [条件];then
指令
fi

if [条件]
then
指令
fi

案例:判断/shell/if1.sh是否存在,如果不存在则创建出来。

#!/bin/bash
file="/shell"
if [ -f "$file/if1.sh" ];then
 echo "${file} OK"
fi

if [ ! -f "$file/if1.sh" ];then
 [ ! -d $file ] &&  mkdir -p $file
 [ -d $file ] && {
  cd $file
  touch if1.sh && echo "${file} touch OK"
}
fi

案例2: 判断系统内存大小,低于100M就进行报警
取内存剩余方法

free -m|sed -nr '3s#^.*  (.*)#\1#gp'
free -m|awk 'NR==3 {print $NF}'

#!/bin/bash
FREE=`free -m|awk 'NR==3 {print $NF}'`
if [ "$FREE" -ge 100 ];then
    echo "MOMERY IS $FREE OK"
   [ "$FREE" -lt 100 ] && echo "MOMERY IS NO FREE"
fi

双分支结构
if [条件];then
指令
else
指令
fi

多分支结构
if [条件];then
指令
elif
then
条件
else
条件
fi

案例:生产环境监控Mysql服务的实战例子
监控Mysql服务是否正常启动,如果未正常启动则启动Mysql

思路:先要判断Mysql是否启动,可以通过端口号来判断
netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'

#!/bin/bash
PORT=`netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'`
if [ "$PORT" = "3306" ];then
   echo "MySQL is RUNING"   
else        
   /etc/init.d/mysqld start
fi    

以上脚本测试不会报错,如果[ “$PORT” = “3306” ]写成[ P O R T − e q 3306 ] 则 为 整 数 比 较 , 在 m y s q l 没 有 启 动 的 时 候 过 滤 不 出 端 口 号 所 以 P O R T 变 量 的 值 为 空 , 空 和 一 个 整 数 比 较 会 有 报 错 , 故 此 我 们 要 把 整 数 比 较 换 为 [ " PORT -eq 3306 ]则为整数比较,在mysql没有启动的时候过滤不出端口号所以PORT变量的值为空,空和一个整数比较会有报错,故此我们要把整数比较换为[ " PORTeq3306]mysqlPORT["PORT" = “3306” ]这样的字符比较,用””引起变成字符,再用字符比较符比对。

以上脚本有些复杂,以后判断端口可以用wc –l 来转换一下,思路是,如果端口存在则返回值为1也可能不为1(因为可能监听的IP不同),不存在则返回值必为0,因为0没有启动是不会有任何变化的,所以最好和0进行比较,如果等于0则启动,不为0则输出已经启动。利用这样的特性进行判断, [ $PORT -eq 0 ]也不用转换为字符串,因为wc –l的结果必为整数。
netstat -lnt|grep 3306|wc –l

#!/bin/bash
PORT=`netstat -lnt|grep 3306|wc -l`
if [ $PORT -eq 0 ];then
     /etc/init.d/mysqld start
else
   echo "MySQL is RUNING"
fi

远程监控apache服务

#!/bin/bash
HttpPort=`nmap 10.125.192.6 -p 80|grep open|wc -l`
if [ $HttpPort -eq 1 ];then
  echo "httpd is runing"
else
  /etc/init.d/httpd start
fi
通过url监控apache
#!/bin/bash
WgUrl=`wget -T 10 -q 10.125.192.6`
if [ $? -eq 0 ];then
   echo "httpd is runing"
else
   /etc/init.d/httpd start
fi

通过状态码监控web
通过状态码curl要加-s安静输出,不然取值会有问题
curl -I -s 10.125.192.6|grep 200 >/dev/null 2>&1

若用telnet检测端口需要取消交互模式
用-e参数给后面telnet命令传一个回车
echo -e “\n”|telnet baidu.com 80|grep Connected

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值