Shell 脚本攻略——循环语句(for 循环、while 循环、until 循环)

前言

在我们实际的工作环境中,经常会进行重复性的工作,每次只是需要处理的对象不一而已,如何能够效率更高的面对这类简单工作呢,这就是我们接下来要进行学习的循环语句

一、for循环语句

1.结构

  • 指定一个变量及取值列表,读取不同的变量值,用来逐个执行同一组命令,直到变量值用完退出当前循环
  • 这里取值列表为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定
#语法结构:
for 变量名 in 取值列表
do
        命令序列
done
  • 位于do···done之间的命令序列称为“循环体”

  • 首先将取值列表中的第一个取值赋予给变量,然后执行循环体中的命令序列

  • 然后再将第二个取值赋予给变量,进行循环命令以此类推直到取值用完

  • 最后跳至done语句,表示循环结束

2.示例

①根据IP地址列表检测主机状态

#!/bin/bash

for  ((i=1;i<=10;i++))
do
        ping -c 3 -i 0.2 -W 3 "192.168.126.$i" &> /dev/null
         if [ $? -eq 0 ]
then
        echo "192.168.126.$i is up"
else
        echo "192.168.126.$i is down"
         fi
done
  • 验证结果
[root@localhost ~]# vim IP.sh 
[root@localhost ~]# . IP.sh 
192.168.126.1 is up
192.168.126.2 is up
192.168.126.3 is down
192.168.126.4 is down
192.168.126.5 is down
192.168.126.6 is down
192.168.126.7 is down
192.168.126.8 is down
192.168.126.9 is down
192.168.126.10 is down

二、While循环语句

  • for语句适用于列表对象无规律,且列表来源已固定的场合,而对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等等更加细分的情况,我们应该怎么办呢
  • 有需求就会有响应解决办法,这就是我们接下来要学习的while循环语句

1.结构

  • 重复测试某个条件,只要条件成立则反复执行,直到该条件不再满足为止

  • 根据上述情况,应避免出现死循环的情况,否则后面有指令都将无法执行

  • 因此,循环体内的命令序列中应该包括修改测试条件的语句,以便在适当的时候使测试条件不再成立,从而结束循环

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

##示例
while 未猜中正确价格
do
        #反复猜测商品价格
done
  • 首先判断条件测试操作,若条件成立则执行do···done循环体中的命令序列;返回while后再判断···如此往复循环,直到while后的条件测试操作不成立位置,最后跳转至done结束循环

2.示例

①猜商品价格游戏

  • 提示用户猜测并记录猜测次数,猜中后即可退出循环

  • 通过环境变量RANDOM可获取一个随机整数,计算其与1000的余数即可获得0~999的随机价格

#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
a=0
echo "商品实际价格范围为0-999,快来猜猜是多少?"
while true
do
read -p "请输入你猜测的价格数目:" n
		let a++
if [ $n -eq $PRICE ]
      	  then
echo "牛啊牛啊,猜对了,实际价格是 $PRICE"
echo "你总共猜了 $a 次"
exit 0
elif [ $n -gt $PRICE ]
        then
echo "你猜高了"
else
echo "你猜低了"
fi
done
  • exit 0 返回至“0”,完成测试后退出当前循环所用
  • 验证
[root@localhost ~]# vim money.sh
[root@localhost ~]# . money.sh 
商品实际价格范围为0-999,快来猜猜是多少?
请输入你猜测的价格数目:500
你猜低了
请输入你猜测的价格数目:700
你猜高了
请输入你猜测的价格数目:600
你猜低了
请输入你猜测的价格数目:650
你猜低了
请输入你猜测的价格数目:680
你猜高了
请输入你猜测的价格数目:665
你猜高了
请输入你猜测的价格数目:660
你猜高了
请输入你猜测的价格数目:655
你猜高了
请输入你猜测的价格数目:653
牛啊牛啊,猜对了,实际价格是 653
你总共猜了 9 次

②提示用户输入一个小于100的整数,并计算从1到该数之间所有证书之和

#!/bin/bash
i=1
sum=0
read -p "请输入一个小于100的整数:" a
while [ $i -le $a ]
do
        let sum+=$i
        let i++
done
        echo "1到$a之间所有整数之和为$sum"
  • 验证
[root@localhost ~]# vim num.sh
[root@localhost ~]# . num.sh 
请输入一个小于100的整数:30
1到30之间所有整数之和为465
[root@localhost ~]# . num.sh 
请输入一个小于100的整数:60
1到60之间所有整数之和为1830
  • 解释一下上面循环体的逻辑,首先是:sum=0+1=1,i=1,然后下一次循环,sum=1+2=3,i=2;sum=3+3=6(1+2+3),i=3,一直循环至用户所输数字为止,下面的let i++就是这个能一起结合起来,并且最终跳出循环的条件

三、until循环语句

1.结构

  • 重复测试某个条件,若条件不成立则反复执行
语句结构:
until 条件测试操作
do  
   命令序列
done
  • 和 while 是相反的逻辑,在实际使用中比较少,因为大家一般都是正向逻辑

2.示例

计算1—100所有整数之和

#!/bin/bash
sum=0
i=1

read -p "请输入一个1-100的整数:" num
until [ $i -gt $num ]
do
        let sum+=$i
        let i++
done
        echo "从1到$num之间整数和为$sum"
  • 验证
[root@localhost ~]# vim num1.sh
[root@localhost ~]# . num1.sh 
请输入一个1-100的整数:30
从1到30之间整数和为465
[root@localhost ~]# . num1.sh 
请输入一个1-100的整数:50
从1到50之间整数和为1275
  • 怎么样,是不是一模一样,就是语句结构的第一句变了,我反着来
  • 若i大于用户输入的数这个条件不成立就会,反复执行,即i小于用户输入的数字就会反复执行,反向思维有点绕~哎
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值