If 条件判断
if COMMANDS; then COMMANDS; 2、[ elif COMMANDS; then COMMANDS; ]... 3、[ else COMMANDS; ] 4、fi
单分支:如果if COMMANDS为真,执行then COMMANDS; 忽略2、3,执行4、fi 结束
双分支:如果 1、if COMMANDS; then COMMANDS;不为真,将执行 2、elifCOMMANDS; then COMMANDS; ]... 可以是多条语句,忽略3,执行4、fi 结束
多分支:如果 1和2 判断条件不为真,执行3、[ else COMMANDS; ] 4、fi 结束
语法格式:
单分支
If 判断条件;then
条件代码
fi
双分支
If 判断条件;then
条件代码
else 判断条件;then
条件代码
fi
多分支
If 判断条件;then
条件代码
elif 判断条件;then
条件代码
elif 判断条件;then
条件代码
elif 判断条件;then
以上条件代码不成立执行
fi
for 循环
for: for NAME [in WORDS ... ] ; do COMMANDS; done
for 变量名 in 列表;do
循环体
done
依次将列表中的元素赋给”变量名”,每次赋值后即执行一次
循环体;直到列表中的元素耗尽,循环结束。
实例:
#!/bin/bash
sum=0
for i in {1..100};do
sum $[sum+i]
done
echo $sum
while 循环
while COMMANDS; do COMMANDS; done
Whlie 条件;do
循环体
done
进入循环前,先做一次判断;每一次循环之后再次判断;条件
为”ture”,则执行一次循环;直到条件为”false”终止循环
进入条件:true 永远为ture就一直循环
退出条件:false
实例:
死循环:while true;do sleep 1;echo true;done
监控http服务:
Systemctl stop httpd
#!/bin/bash
sleeptime=30
while true;do
if killall -0 httpd &> /dev/null;then
true
else
systemctl restart httpd
time=date +"%F %T"
echo "At $time httpd is restarted" >> /app/httpd.log
使用while循环当ip访问连接本机三次以上将拒绝访问。
#!/bin/bash
sleeptime=10
while true;do
ss -nt|grep ESTAB|tr -s " " :|cut -d: -f6|sort|uniq -c|while read num ip;do
if [[ "$num" -gt 3 ]];then
iptables -A INPUT -s $ip -j REJECT
fi
done
sleep $sleeptime
done
转载于:https://blog.51cto.com/12601987/2056071