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