本文共 2286 字,大约阅读时间需要 7 分钟。
形式一:
for 变量名 in 列表;do 循环体done执行机制:依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束形式二:
for ((控制变量初始化;条件判断表达式;控制变量的修正表达式));do 循环体done控制变量初始化:仅在运行到循环代码段时执行一次控制变量的修正表达式:每轮循环结束会先进行控制变量修正运算,而后再做条件判断example:
①实现1到100之和
形式一:形式二:②实现1到100的奇数和③打印随机色的多行 *效果④打印打印九九乘法表形式一:形式二:
while CONDITION; do
循环体doneCONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环example:
①自动打印10个随机数字并输出,显示其中最大和最小值
效果②打印国际象棋棋盘
while循环的特殊用法(遍历文件的每一行)
while read line; do 循环体done < /data/test.txt依次读取/data/test.txt文件中的每一行,且将行赋值给变量lineexample:
读取name.txt文件,逐行做创建用户处理
数组元素的赋值
(1) 一次只赋值一个元素ARRAY_NAME[INDEX]=VALUEweekdays[0]="Sunday"weekdays[4]="Thursday"(2) 一次赋值全部元素ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)(3) 只赋值特定元素ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)(4) 交互式数组值对赋值read -a ARRAY引用数组元素
example:
①检查磁盘空间是否超过80%的利用率
②生成10个随机数,比大小
扫描地址段,迸发
[root@localhost data]# vim scan_host.sh
#!/bin/bashNET=172.22for 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}& waitdonewaitecho "scan host is finished"[root@localhost data]# bash scan_host.sh172.22.0.6 is up172.22.0.1 is up172.22.0.7 is up172.22.0.50 is up172.22.0.100 is up172.22.0.111 is up172.22.0.154 is up...
监控httpd服务
[root@localhost data]# vim monitor_httpdwhile.sh#!/bin/bashSLEEPTIME=30SERVICE=httpdLOG=/var/log/monitor$SERVICE.log
while true;do if killall -0 $SERVICE &>/dev/null;then true else systemctl restart $SERVICE echo "ATdate +'%F %T'
$SERVICE is restart" | tee -a $LOG | mail -s warningroot fi sleep $SLEEPTIMEdone[root@localhost ~]# bash monitor_httpd_while.sh打开workspace2,或者用xshell,再打开同一个主机。杀死进程,查看日志。[root@localhost ~]# killall httpd[root@localhost ~]# tail -f /var/log/monitor_httpd.logAT 2019-05-20 09:47:12 httpd is restartAT 2019-05-20 09:47:46 httpd is restartAT 2019-05-20 09:48:46 httpd is restart
⼤于100次IP的,丢⼊防⽕墙,拒绝访问
[root@localhost data]# vim deny_while.sh
#!/bin/bashsed -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 fidone
转载于:https://blog.51cto.com/14322593/2409541