shell循环
2022/7/26 5:22:55
本文主要是介绍shell循环,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
shell 循环
循环的分类
循环名称 | 循环含义 | 应用场景 |
---|---|---|
while | 当型循环 | 死循环、按行读取文件、有条件循环 |
do until | 直到型循环 | 没有场景 |
for | 通用型循环 | 很多应用场景 |
循环语法
while循环
while <条件表达式>;do cmd1 cmd2 cmd3 done while <条件表达式> do cmd1 cmd2 cmd3 done # 死循环 while true;do echo 'hei hei hei' done while [ 1 -eq 1 ];do echo 'hei hei hei' done while :;do echo 'hei hei hei' done
使用while循环模拟for循环seq
n=1 while [ $n -le 10 ];do echo $n ((n++)) done
使用while循环实现1加到100
#!/bin/bash a=0 i=1 while [ $i -le 100 ];do ((a=a+i)) ((i++)) done echo $a [root@web02 ~]# echo {1..100}|tr ' ' '+'|bc 5050 [root@web02 ~]# seq -s+ 100|bc 5050 [root@web02 ~]# seq 100 |awk '{m=m+$1}END{print m}' 5050 [root@web02 ~]# awk 'BEGIN{for(i=1;i<=100;i++)sum=sum+i;print sum}' 5050
until循环(忘记它)
until <条件表达式>;do cmd1 cmd2 done until <条件表达式> do cmd1 cmd2 done until循环执行一系列命令直到条件为true时停止 until循环与while循环在处理方式上刚好相反 一般while循环优于until,但在某些时候也只是机上数情况下,until循环更加有用
for循环
语法一
# 无法指定循环次数,变量表达式中有多少内容就循环多少次 for i in 变量表达式;do cmd1 cmd2 done for i in 变量表达式 do cmd1 cmd2 done 变量表达式: 可以是文件的内容(按空格循环) 可以是序列命令的内容 可以是数组中的内容 可以是以空格为分隔符的字符串
语法二
指定循环次数 for((i=1;i<=100;i++));do echo $i done
循环的控制语句
continue break
break跳出循环
break命令允许跳出所有循环(终止后面所有循环) 下面的例子中,脚本进入死循环直至用户输入数字等于5. #!/bin/bash while true;do read -p "请输入一个数字" a if [ $a -eq 5 ];then break else echo "你输入的是 $a" fi done
continue跳出循环
continue命令与break命令类似,只有一点差别,他不会跳出所有损坏,仅仅跳出当前循环 i=0 while [ $i -le 10 ];do ((i++)) if [ $i -eq 5 ];then continue else echo $i fi done
while循环读取文件
# for循环读取文件 #!/bin/bash for i in `cat 1.txt`;do echo $i done # while读取文件 # 方法一 exec < 1.txt while read i;do echo $i done # 方法二 #!/bin/bash cat 1.txt|while read i;do echo $i done # 方法三 #!/bin/bash while read i;do echo $i done < 1.txt
作业
案例1
# 日志分析案例 grep tcp netstat.log | awk '{print $5}' | sort -n |uniq -c | sort -n -r|while read i;do a=`echo $i |awk '{print $1}'` b=`echo $i |awk '{print $2'}|awk -F : '{print $1}'` if [ $a -eq 100 ];then firewall-cmd --add-source=$b --zone=drop fi done
案例2
# 在指定目录下,通过随机10个小写字母,然后生成一个文件名:随机密码_zls.txt #!/bin/bash for i in `seq 10`;do a="`tr -cd 'a-z'</dev/urandom|head -c 10`_zls.txt" touch /tmp/$a done
案例四
# 创建100个用户生成随机密码并保存到文件 #!/bin/bash for i in `seq 100`;do useradd zh${i} a=`echo $RANDOM` echo $a | passwd --stdin zh$i &> /dev/null echo zh${i}:$a >> 4.pass done
案例五
# 模拟黑客,扫描存活主机,扫描存活端口 #!/bin/bash . /etc/init.d/functions for i in `seq 255`;do ping -c1 -w1 10.0.0.$i &>/dev/null if [ $? -eq 0 ];then action 10.0.0.$i /bin/true for port in `seq 65535`;do { port2=`echo ''|telnet 10.0.0.$i $port 2>/dev/null |grep 'Connected'|wc -l` if [ $port2 -ne 0 ];then echo "$port 端口存活" fi } & usleep 300 done fi done
这篇关于shell循环的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-22[开源]10.3K+ Star!轻量强大的开源运维平台,超赞!
- 2024-11-21Flutter基础教程:新手入门指南
- 2024-11-21Flutter跨平台教程:新手入门详解
- 2024-11-21Flutter跨平台教程:新手入门与实践指南
- 2024-11-21Flutter列表组件教程:初学者指南
- 2024-11-21Flutter列表组件教程:新手入门指南
- 2024-11-21Flutter入门教程:初学者必看指南
- 2024-11-21Flutter入门教程:从零开始的Flutter开发指南
- 2024-11-21Flutter升级教程:新手必读的升级指南
- 2024-11-21Flutter升级教程:轻松掌握Flutter版本更新