while循环
while循环是一种常见的循环结构,我们在学习python,C等编程语言时都接触过此结构。使用while循环,可以使得用户重复执行一系列操作,直到某个条件的发生。
while循环的基本语法
while expression
do
statement1
statement2
...
done
- 上述语法中,expression表示while循环语句执行时需要满足的条件。虽然此处可以使用任意合法的shell命令。但是通常情况下,expression代表一个测试表达式,与其他循环语句一样do和done关键字之间是循环结构的循环体。
1.while循环读取文件
方法一
-
- 采用exec读取文件,然后进入while循环处理
exec < file
while read line
do
statement1
done
方法二
-
- 使用cat读取文件,然后通过管道进入while循环
cat file | while line
do
statement
done
方法三
-
- 通过在while循环结尾,使用输入重定向的方式
while read line
do
statement
done < file
while语句的示例
案例一
-
- 猜某一商品的价格
要求: (1)通过变量random获取随机数
(2)提示用户猜测并提示次数,猜中后退出循环
分析: (1)如何产生随机数
(2)猜中才会退出,需使用死循环(while true)
(3)通过if语句,根据用户输入内容与随机数比较
(4)记录猜测次数,每猜一次次数加一
- 猜某一商品的价格
示例代码
#! /bin/bash
PRICE=$[$RANDOM % 100 ] #生成一个两位数
TIMES=0
while true
do
read -p "请输入商品的价格[0-99]:" var #用户输入猜测的价格
let TIMES++ #猜测后,猜测次数加一
if [ $var -eq $PRICE ] #猜测价格与实际价格比较
then
echo "恭喜你,答对了!"
echo "一共猜了$TIMES次!"
exit 0 #猜对后,退出循环
elif [ $var -gt $PRICE ]
then
echo "猜高了,请继续猜!!!"
else
echo "猜低了,请继续猜!!!"
fi
done
结果:
[root@bogon ~]# ./while1.sh
请输入商品的价格[0-99]:50
猜低了,请继续猜!!!
请输入商品的价格[0-99]:75
猜高了,请继续猜!!!
请输入商品的价格[0-99]:65
猜高了,请继续猜!!!
请输入商品的价格[0-99]:58
猜低了,请继续猜!!!
请输入商品的价格[0-99]:63
猜高了,请继续猜!!!
请输入商品的价格[0-99]:62
猜高了,请继续猜!!!
请输入商品的价格[0-99]:59
猜低了,请继续猜!!!
请输入商品的价格[0-99]:60
猜低了,请继续猜!!!
请输入商品的价格[0-99]:61
恭喜你,答对了!
一共猜了9次!
while读取文件
要求:在生产环境中,要求从一个IP列表获取IP port,然后ssh ip 到目标机器进行特定的操作
模拟生产环境:先创建一个文件
示例代码
[root@bogon ~]vim file
192.168.150.111 222
192.168.150.112 333
192.168.150.113 444
方法一
#! /bin/bash
while read line
do
IP=$(echo $line | awk {'print $1'})
PORT=$(echo $line | awk {'print $2'})
echo "IP: $IP,PORT: $PORT"
done < file
结果:
[root@bogon ~]# vim while2.sh
[root@bogon ~]# ./while2.sh
IP: 192.168.150.111,PORT: 222
IP: 192.168.150.112,PORT: 333
IP: 192.168.150.113,PORT: 444
方法二
#! /bin/bash
exec < file
while read line
do
IP=$(echo $line | awk {'print $1'})
PORT=$(echo $line | awk {'print $2'})
echo "IP: $IP,PORT: $PORT"
done
方法三
#! /bin/bash
cat file | while read line
do
IP=$(echo $line | awk {'print $1'})
PORT=$(echo $line | awk {'print $2'})
echo "IP: $IP,PORT: $PORT"
done
版权声明:本文为chen__yang_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。