常用的循环语句

for循环:

形式一: for 变量名 in 列表;do   循环体 done 执行机制: 依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直 到列表中的元素耗尽,循环结束

形式二: for ((控制变量初始化;条件判断表达式;控制变量的修正表达式));do   循环体 done 控制变量初始化:仅在运行到循环代码段时执行一次 控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断

example:

①实现1到100之和 形式一: 形式二: ②实现1到100的奇数和 ③打印随机色的多行 * 效果 ④打印打印九九乘法表 形式一: 形式二:

while循环:

while CONDITION; do    循环体 done CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false” 终止循环

example:

①自动打印10个随机数字并输出,显示其中最大和最小值 效果 ②打印国际象棋棋盘

while循环的特殊用法(遍历文件的每一行) while read line; do    循环体 done < /data/test.txt 依次读取/data/test.txt文件中的每一行,且将行赋值给变量line

example:

读取name.txt文件,逐行做创建用户处理

数组:

数组元素的赋值 (1) 一次只赋值一个元素 ARRAY_NAME[INDEX]=VALUE weekdays[0]="Sunday" weekdays[4]="Thursday" (2) 一次赋值全部元素 ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...) (3) 只赋值特定元素 ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...) (4) 交互式数组值对赋值 read -a ARRAY

引用数组元素 ${ARRAY_NAME[INDEX]} 注意:省略[INDEX]表示引用下标为0的元素 引用数组所有元素 ${ARRAY_NAME[]} ${ARRAY_NAME[@]} 数组的长度(数组中元素的个数) ${#ARRAY_NAME[]} ${#ARRAY_NAME[@]} 删除数组中的某元素:导致稀疏格式 unset ARRAY[INDEX] 删除整个数组 unset ARRAY

example:

①检查磁盘空间是否超过80%的利用率 ②生成10个随机数,比大小

扫描地址段,迸发

[root@localhost data]# vim scan_host.sh #!/bin/bash NET=172.22 for SUBNET in {0..255};do {    for HOST in {1..254};do       { ping -c1 -W1 $NET.$SUBNET.$HOST &> /dev/null && echo $NET.$SUBNET.$HOST is up; }&    done }&    wait done wait echo "scan host is finished" [root@localhost data]# bash scan_host.sh 172.22.0.6 is up 172.22.0.1 is up 172.22.0.7 is up 172.22.0.50 is up 172.22.0.100 is up 172.22.0.111 is up 172.22.0.154 is up ...

监控httpd服务

[root@localhost data]# vim monitor_httpd_while.sh #!/bin/bash SLEEPTIME=30 SERVICE=httpd LOG=/var/log/monitor_$SERVICE.log while true;do    if killall -0 $SERVICE &>/dev/null;then       true    else       systemctl restart $SERVICE       echo "AT date +'%F %T' $SERVICE is restart" | tee -a $LOG | mail -s warning root    fi    sleep $SLEEPTIME done [root@localhost ~]# bash monitor_httpd_while.sh 打开workspace2,或者用xshell,再打开同一个主机。杀死进程,查看日志。 [root@localhost ~]# killall httpd [root@localhost ~]# tail -f /var/log/monitor_httpd.log AT 2019-05-20 09:47:12 httpd is restart AT 2019-05-20 09:47:46 httpd is restart AT 2019-05-20 09:48:46 httpd is restart

⼤于100次IP的,丢⼊防⽕墙,拒绝访问

[root@localhost data]# vim deny_while.sh #!/bin/bash sed -nr '/^ESTAB/s#.* ([0-9.]+):[0-9]+.*$#\1#p' ss.log|sort |uniq -c |while read times ip;do    if [ $times -gt 100 ];then       iptables -A INPUT -s $ip -j REJECT    fi done