文章目录
- 前言
- 一、for循环语句
- 1.结构
- 2.示例
- ①根据IP地址列表检测主机状态
- 二、While循环语句
- 1.结构
- 2.示例
- ①猜商品价格游戏
- ②提示用户输入一个小于100的整数,并计算从1到该数之间所有证书之和
- 三、until循环语句
- 1.结构
- 2.示例
前言
在我们实际的工作环境中,经常会进行重复性的工作,每次只是需要处理的对象不一而已,如何能够效率更高的面对这类简单工作呢,这就是我们接下来要进行学习的循环语句
一、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小于用户输入的数字就会反复执行,反向思维有点绕~哎