08@流程控制之for循环

1|0流程控制之for循环

1|1一、语法

#===========》Shell风格语法 for 变量名 [ in 取值列表 ] do 循环体 done #===========》C语言风格语法 for ((初值;条件;步长)) do 循环体 done

1|01、shell风格的for,常用in列表方式

for i in 1 2 3 for i in {1,2,3} for i in {1..9} for i in {9..1} for i in {a..z} for i in {A..Z} for i in {X..Z} for i in $(命令) # 例如:for i in $(head -10 /etc/passwd);do echo $i|cut -d: -f1,2;done for i in $(find ...)

1|02、continue与for

continue#默认退出本次(这一次)循环 break#默认退出本层(整个)循环

1|2二 案例

1|01、案例:shell风格的for

for i in {1..10} do echo $i done

1|02、案例:c语言风格的for

for ((i=1;i<=10;i++)) #运用语法条件限制引用变量 do echo $i done

1|03、案例:检查内网存活的ip,使用&符号提升脚本的运行效率

#!/bin/bash for i in {1..254} #连续选择循环引用池内的变量内容 do (ping -W 1 -c 1 192.168.12.$i &> /dev/null && echo 192.168.12.$i) & done

1|04、案例:编写文件类型测试脚本,支持多个参数

[root@egon /]# cat file.sh #!/bin/bash for i in $@ #$@表示所有的任意一个或多个 do if [[ -d $i ]];then #目录判断 echo "$i is directory." elif [[ -b $i ]];then echo "$i is block device." elif [[ -f $i ]];then echo "$i is a regular file." else echo "unknow." fi done [root@egon /]# chmod +x file.sh [root@egon /]# [root@egon /]# ./file.sh a.txt /etc /root /abc #设定目录进行查询(可以一个或多个) a.txt is a regular file. /etc is directory. /root is directory. unknow.

1|05、案例:可以直接在命令行编写for循环

[root@egon /]# for i in {1..10};do [ $i -eq 5 ] && continue || echo $i;done [root@egon /]# for i in {1..10};do [ $i -eq 5 ] && break || echo $i;done

1|06、案例:统计dev下每种文件类型的数量

#!/bin/bash dir='/dev' for i in `ls $dir` do if [ -b $dir/$i ];then ((block++)) # 或者 let block++,下同 elif [ -f $dir/$i ];then ((file++)) elif [ -d $dir/$i ];then ((directory++)) else ((unkown++)) fi done echo 'block' $block echo 'regular file' $file echo 'directory' $directory echo 'unkown' $unkown

1|07、案例:检查用户

向脚本传递一个用户名,验证这个用户是否存在.

[root@egon ~]# cat testuser.sh #!/bin/bash id $1 &> /dev/null if [ $? -eq 0 ];then echo "用户$1存在" else echo "用户$1不存在" fi [root@egon ~]# ./testuser.sh root 用户root存在

1|08、案例:用户提添加与删除

添加30个用户,再将它们删除

for i in {1..30}; do useradd user$i&&echo "user$i create successful" done for i in {1..30}; do userdel -r user$i&&echo "user$i delete successful" done

1|09、案例:用户创建编写

输入账号信息,输入个数,批量创建用户user01、user02、user03…,密码默认123456

[root@egon shell]# cat adduser.sh #!/bin/bash read -p "请输入创建的用户名信息: " name read -p "请输入创建的用户数量: " count for i in `seq -w $count` do echo $name$i useradd $name$i &>/dev/null echo 123456 | passwd --stdin $name$i &>/dev/null id $name$i &>/dev/null [ $? -eq 0 ] && echo "$name$i create is ok" || echo "$name$i create is failed" done

1|010、案例:嵌套多层for循环,结合break与continue(了解)

1#使用break: break 默认参数是 1 所以写 break 等于 break 1 意义:退出当前循环层 break 2 则向上退出2层循环 当前循环也计算在退出层次里 # 示例 for i in {0..3} do echo -e "第一层循环:loop$i" for j in {0..3} do echo -e "\t第二层循环:loop$j" for n in {0..3} do echo -e "\t\t第三层循环:loop$n:$i$j$n" if ((n==2));then break 3 fi done done done 2#使用continue continue = continue 1 在当次循环中忽略continue后续的代码 就是:立即结束当前循环中的当次循环,而转入当前循环的下一次循环 continue 2 等同于 break 1 continue 3 等同于 break 2 总结:continue n 等同于 break n-1 for i in {0..3} do echo -e "第一层循环:loop$i" for j in {0..3} do echo -e "\t第二层循环:loop$j" for n in {0..3} do echo -e "\t\t第三层循环:loop$n:$i$j$n" if ((n==2));then continue 3 fi done done done

1|011、案列:编写99乘法表(for)

#!/bin/bash for x in {1..9} do for y in {1..9}; do if (( $y <= $x ));then echo -en "$y*$x=$(($y*$x))\t" #(echo -e \t)相当于tab键, (echo -n)取消换行符 let y++ fi done echo "" let x++ done [root@web01 opt]# sh hzl.sh 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 #案列二 #!/bin/bash for ((j=1;j<=9;j++)) do for ((i=1;i<=j;i++)) do echo -e -n "${i}X${j}=$[${i}*${j}]\t" done echo done [root@zabbix ~]# sh hzl.sh 1X1=1 1X2=2 2X2=4 1X3=3 2X3=6 3X3=9 1X4=4 2X4=8 3X4=12 4X4=16 1X5=5 2X5=10 3X5=15 4X5=20 5X5=25 1X6=6 2X6=12 3X6=18 4X6=24 5X6=30 6X6=36 1X7=7 2X7=14 3X7=21 4X7=28 5X7=35 6X7=42 7X7=49 1X8=8 2X8=16 3X8=24 4X8=32 5X8=40 6X8=48 7X8=56 8X8=64 1X9=9 2X9=18 3X9=27 4X9=36 5X9=45 6X9=54 7X9=63 8X9=72 9X9=81

__EOF__

本文作者ଲ小何才露煎煎饺
本文链接https://www.cnblogs.com/zeny/p/15121522.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   ଲ小何才露煎煎饺  阅读(101)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示