shell之while循环

本文介绍了在Shell脚本中使用while循环的基本语法和多种读取文件的方法,包括使用exec、cat以及输入重定向。通过示例展示了如何用while循环实现猜价格游戏以及从文件读取IP和port进行SSH操作的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值