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
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐