博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
循环语句脚本
阅读量:6585 次
发布时间:2019-06-24

本文共 2286 字,大约阅读时间需要 7 分钟。

常用的循环语句

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

引用数组元素

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_httpdwhile.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

转载于:https://blog.51cto.com/14322593/2409541

你可能感兴趣的文章
用函数指针读取并调用虚函数表指向的每个函数
查看>>
办公小贴士之:在Outlook 2010中添加农历生日
查看>>
我的友情链接
查看>>
ActionScript 3.0游戏编程——创建简单的ActionScript程序
查看>>
函数const
查看>>
关于“Return empty arrays or collections, not nulls”的思考
查看>>
CodeForces-1167E-Range Deleting
查看>>
兼容多个版本程序集的web.config配置
查看>>
JS 之如何在插入元素时插在原有元素的前面而不是末尾
查看>>
java finally块执行时机分析
查看>>
day6 字符串
查看>>
JMeter5.0 边界提取器使用
查看>>
android 热修复框架Tinker的详细简单使用
查看>>
Windows Azure 上的 Symfony,适用于 PHP 开发者的强大组合
查看>>
堆和栈的区别 (转贴)
查看>>
通过包名获取该包下的所有类
查看>>
FIND_IN_SET函数
查看>>
【JavaScript学习笔记】画图
查看>>
反向代理与直接访问Ping性能分析
查看>>
Linux写时拷贝技术(copy-on-write)
查看>>