linux for循环 | while循环 | until 循环 | 超详细

概述:

脚本执行任务的时候总会遇到需要重复执行的时候,为了节省资源,除了计划任务,我们还可以使用脚本来完成,接下来就是Shell脚本中的三种循环

for循环

➤for循环,又有人称之为条件循环,或者for i in ,其实就是for循环的特性,次数和给与的条件是成正比的
➤for语句结构
读取不同的变量值,用来逐个执行同一组命令
for 变量名 in 取值列表
do
命令序列
done
在这里插入图片描述
for 循环格式
1.for i in {1…10} 或者 for i in $(seq 1…10…2)
2. for i in $(seq 1 10)或者for i in $(seq 1 2 10)
3. for((i=1;i<=10;i++))或者for((i=1;i<=10;i+=2))
do
echo $i
done
4.for ((i=1;i<=10;i++)); do echo $1;done

➤➤例题:批量添加用户,用户名存放在users.txt文件中,每一行,初始密码均设为123456,创建脚本验证

#!/bin/bash
a=$(cat name.txt)
for i in $a
do
 useradd $i
 echo "123456" | passwd --stdin $i
 或者
 echo-e "123456\n123456\n" | passwd $i &> /dev/null
done

在这里插入图片描述

➤➤例题:根据IP地址检查主机状态,使用ping命令检测各主机的连通性,创建脚本验证

for i in 192.168.1.{1..254}
do
ping -c 3 -i 0.5 -w 2 $i  &> /dev/null && echo " $i line" || echo " $i is offline"
done

在这里插入图片描述

while循环

只要条件成立,则反复循环,不成立即停止

while语句结构
while 条件测试操作
do
   命令序列
done

在这里插入图片描述

➤➤例:输出1到10 的整数

#!/bin/bash
i=0
while [ $i -le 10 ]
do
    echo $i
    let i++
done

在这里插入图片描述

在这里插入图片描述

注意: let i++ 位置不同,输出的值是不一样的
在这里插入图片描述

➤➤例:有20个以std开头的用户需要创建,并设立123456为初始密码

#!/bin/bash
i=1
while [ $i -le 20 ]
do
   useradd stu$i
   echo "123456" | passwd --stdin stu$i
   i=$[$i +1]
done

➤➤例: 猜商品价格游戏,通过变量RANDOM获取,提示用户猜测和记录次数,猜中后退出

#!/bin/bash

echo "***猜商品价格是多少**"
read -p "输入你心里猜测的数" num
a=0
sum=0
price=$[$RANDOM % 1000 ]
while [ $a -eq 0 ]
do
let num++
    if [ $num -eq $price ];then
       echo "你猜对了"
       let a++
    elif [ $num -lt $price ];then
        echo "你猜小了"
    elif [ $num -gt $prie ];then
        echo "你猜大了"
    fi
done
 echo "你总共猜对了几次"

在这里插入图片描述

until循环

重复测试某个条件,只要条件不成立则反复循环

until 条件测试操作
do  
   命令序列
done

在这里插入图片描述

➤➤例:输出1-10整数

#!/bin/bash
a=0
until (( $a -gt 10))
d0
   echo $a
   let a++
done

➤➤例: 计算1-50的数值总和

#!bin/bash
a=0
sum=0
until [ $a -gl 50 ]
do
  echo $[$a+$sum]
  let a++
done

vm

➤break 跳出单个循环

例:

for ((a=1; a<=5;a++))
do
       echo "外循环第$i次"
       if [  $a -eq 3 ];then
            break
        fi
        for ((b=1; b<=5;b++))
        do
        echo "内循环第$b次"
        if [$b -eq 3 ];then
            break
        fi
       done
done

在这里插入图片描述

➤break 2 跳出2层循环

for ((a=1; a<=5;a++))
do
      
       
            
        for ((b=1; b<=5;b++))
        do
        echo "内循环第$b次"
        if [$b -eq 3 ];then
            break 2
        fi
       done
done

在这里插入图片描述

➤continue :中止某次循环中的命令,但不会完全中止整个命令

例:

#!/bin/bash
for ((a=1; a<=5;a++))
do
  echo "外层循环为$a"
  if [ $a -gt 2 -a $a -lt 4 ];then
     continue
  fi

  echo $[$a*2]

done

在这里插入图片描述

#!/bin/bash
a=0
while [ $a -lt 10 ]
do
  echo "外层循环为$a"
  if [ $a -gt 2 -a $a -lt 4 ];then
     continue
  fi

  echo $[$a*2]
  let a++
done

结果进入死循环,是因为在执行第3次循环的时候,从continue处跳出来,并没有执行下面的自增,a还是3,又以a=3进入循环,所有周而复始都是a=3在运作。

在这里插入图片描述

#!/bin/bash
a=0
while [ $a -lt 10 ]
do
  let a++
  echo "外层循环为$a"
  if [ $a -gt 2 -a $a -lt 4 ];then
     continue
  fi

  echo $[$a*2]
  
done

在这里插入图片描述
结果没有进入死循环,是因为在执行第3次循环的时候,从continue处跳出来,并执行了上面的自增,变成了a=4,所以不会进入死循环

➤IFS字段分隔符

默认包含 空格,制表符,换行符  
set | grep IFS
IFS= $' \t\n'
修改成只换行
IFS=$'\n'

IFS.OLD=$IFS #先备份一下系统初始值
IFS=$'\n'    #修改成你需要的模式
...
IFS=$IFS.OLD #结束后恢复成系统初始值

例:
我文本初始模式
在这里插入图片描述

oldifs=$IFS
IFS=$' :|\t\n'

在这里插入图片描述

IFS=$oldifs
在这里插入图片描述

好的,下面简要介绍一下Bash循环结构。 1. for循环 for循环可以遍历一个列表或者序列,并对每个元素执行相同的操作。for循环的语法如下: ```bash for 变量名 in 列表 do # 待执行的操作 done ``` 其中,变量名表示用于遍历列表的变量名称,列表是一个由空格分隔的元素序列。在循环体中,可以使用变量名引用当前遍历到的元素。 2. while循环 while循环会反复执行一段代码,直到指定的条件不再满足。while循环的语法如下: ```bash while 条件 do # 待执行的操作 done ``` 其中,条件是一个用于判断循环是否继续的表达式。在每次循环迭代中,都会计算条件表达式的值。只有在条件为真时,才会执行循环体中的代码。 3. until循环 until循环while循环类似,不同之处在于,只有在条件为假时才会执行循环体中的代码。until循环的语法如下: ```bash until 条件 do # 待执行的操作 done ``` 其中,条件是一个用于判断循环是否继续的表达式。在每次循环迭代中,都会计算条件表达式的值。只有在条件为假时,才会执行循环体中的代码。 4. select循环 select循环用于显示一个菜单供用户选择。用户可以通过输入编号来选择菜单项。select循环的语法如下: ```bash select 变量名 in 列表 do # 待执行的操作 done ``` 其中,变量名表示用于存储用户选择的变量名称,列表是一个由空格分隔的菜单项序列。在循环体中,可以使用变量名引用用户选择的菜单项。 这些循环结构在Bash脚本中经常使用,可以帮助我们编写更加灵活和高效的脚本。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值