AI智能
改变未来

7.Shell之for循环语句

小破站学习笔记

for循环语句

将一组命令执行已知的次数

  • 列表循环

用于将一组命令执行已知的次数

for i in {1..10}docommanddonefor i in a b cdocommanddonefor i in {0..50..2}###0 2 4 6 8 以2为步长for i in $(seq 10)###也是1到10for i in {10..1}###从10到1for i in $(seq 1 2 10)###1-10 步长为2###{1..10}$(seq 10)1 2 3 4###
  • 不带列表循环
    执行时由用户指定参数和参数个数
for idocommanddone
  • 类C风格的for循环
for (( expr1;expr2;expr3))#里面是表达式docommanddone#expr1:定义变量并赋初值#expr2:决定是否进行循环#expr3:决定循环变量如何改变,决定循环什么时候退出for (( i=1;i<=5;i++))doecho $idonefor ((i=1;i<=10;i+=2))#1 3 5 7 9for ((i=2;i<=10;i+=2))#2 4 6 8 10

应用案例

  • 脚本计算1-100的奇数和
    思路
    把奇数都遍历出来
sum=0for ((i=1;i<=100;i+=2))dosum = $sun + $idoneecho $sum

很多种方法 可以去遍历1-100,再去判断是否为偶数

if [ $[$i%2] -eq 0 ]

循环控制语句

continue:继续;表示循环体下面的代码不执行,重新开始下一次循环,还是继续循环break:打断;马上停止执行本次循环,执行循环体后面的代码,跳出了整个循环exit:表示直接跳出程序,退出
  • 判断所输整数是否为质数
#!/bin/bashread -p \"输入一个数字:\"number[ $number -eq 1 ] && echo \"$number不是质数\" && exit[ $number -eq 2 ] && echo \"$number不是质数\" && exitfor i in `seq 2 $[$number-1]`#for i in `seq 2 $[ $[number-1]/2 ]`#能被2整除 也能被4整除  有点不懂do[ $[$number%$i] -eq 0 ] && \"$number不是质数\" && exitdoneecho \"$number是质数\" && exit
  • 批量创建五个新用户,u1-u5,统一加组class,密码123
#!/bin/bashgrep -w ^class /etc/group &> /dev/nulltest $? -ne 0 && groupdadd classfor i in {1..5}douseradd -G class u$iecho 123|passwd --stdin u$idone#用户创建信息保存日志
  • 新建用户,并指定家目录都在/zss
#!/bin/bash[ -f /zss ] && mv /zss /zss.bak || [ ! -d /zss ] && mkdir /zss#先判断是不是文件 是备份 不是 再判断是不是文件夹 不是创建文件夹for i in {1..5}douseradd -d /zss/u$i u$iecho 123|passwd --stdin u$idone
  • 局域网内脚本检查主机网络通讯
#!/bin/baship=10.1.1for ((i=1;i<=10;i++))do{ping -c1 $ip.$i &>/dev/nullif [ $? -eq 0 ];thenecho \"$ip.$i is ok\" >> /tmp/ip_up.txtelseecho \"$ip.$i is down\" >> /tmp/ip_down.txtfi}&donewaitecho \"ip check is ok.....\"#或者[ $? -eq 0 ] && echo \"$ip.$i is ok\" >> /tmp/ip_up.txt || echo \"$ip.$i is down\" >> /tmp/ip_down.txtdone
  • 并行执行
{}&表示将程序放到后台并行执行,如果需要等待程序执行完毕在进行下面的内容,需要加waittime ./zss.sh查看运行时间

大大提高脚本效率

总结

  • for循环语句结构
列表循环非列表循环类C循环
  • for循环结合条件判断和流程控制语句
do...done 循环体循环体可以是命令集合,再加上条件判断以及流程控制
  • 控制循环语句
continue 继续,跳出本次循环,继续下一次循环break 打断,跳出循环,执行循环体外的代码exit 退出,直接退出程序
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 7.Shell之for循环语句