shell编程之while循环

1.while循环的语法结构如下

while expression
do 
     command
done

将测试expression的返回值,如果返回值为真则执行循环体,为假则不执行。例如:

[root@node1 ~]# cat while01.sh 
#!/bin/bash
count=5
while [ $count -gt 0 ]
do 
   echo -n "$count"
   let count-=1
done
echo
[root@node1 ~]# sh while01.sh 
54321

2.while循环比较经典的用法是按行读取文件,例如:

[root@node1 ~]# cat while02.sh 
#!/bin/bash
cat score.txt | while read LINE
do
   NAME=`echo $LINE | awk '{print $1}'`
   AGE=`echo $LINE | awk '{print $2}'`
   SEX=`echo $LINE | awk '{print $3}'`
   echo "My name is $NAME,I'm $AGE years old,I'm a $SEX"
done
[root@node1 ~]# sh while02.sh 
My name is John,I'm 30 years old,I'm a boy
My name is lily,I'm 40 years old,I'm a girl

3.while的无限循环
主要有3种形式:
方法一:

while (1)
do 
     command
done

方法二:

while true
do 
     command
done

方法三:

whiledo 
     command
done
### Shell 编程中 `while` 循环的用法 在 Shell 编程中,`while` 循环是一种常用的控制结构,允许程序重复执行一段代码直到指定条件不再满足为止。其基本语法如下: ```bash while condition do commands done ``` 在此结构中,`condition` 是一个表达式或命令,只要它的返回值为真(即退出状态码为 0),就会反复执行 `commands` 部分的内容[^1]。 --- #### 示例 1:计算 1 至 100 的整数和 这是一个经典的示例,展示了如何利用 `while` 循环完成累加操作。 ```bash #!/bin/bash sum=0 counter=1 while [ $counter -le 100 ] do sum=$((sum + counter)) counter=$((counter + 1)) done echo "The sum of numbers from 1 to 100 is: $sum" ``` 在这个脚本中: - 初始化变量 `sum` 和 `counter`。 - 使用 `[ $counter -le 100 ]` 检查条件是否成立。 - 在每次迭代中更新 `sum` 和 `counter` 的值。 - 当 `counter` 超过 100 后停止循环并打印结果。 最终输出应为: ```plaintext The sum of numbers from 1 to 100 is: 5050 ``` --- #### 示例 2:猜数字游戏 该示例模拟了一个简单的交互式猜数字游戏,用户需要不断猜测计算机随机生成的一个数字。 ```bash #!/bin/bash target_number=$(($RANDOM % 100 + 1)) # 生成1到100之间的随机数 guess=-1 while [ $guess -ne $target_number ] do read -p "Guess the number (between 1 and 100): " guess if [ $guess -lt $target_number ]; then echo "Too low!" elif [ $guess -gt $target_number ]; then echo "Too high!" fi done echo "Congratulations! You guessed it right, the number was $target_number." ``` 此脚本的关键点在于: - 使用 `$RANDOM` 函数生成目标数字。 - 用户通过标准输入提供猜测值。 - 根据用户的输入调整提示信息,直至匹配成功。 --- #### 示例 3:监控文件大小变化 以下是一个实用的例子,它持续监测某文件的大小是否发生变化。 ```bash #!/bin/bash file="example.txt" previous_size=$(stat --format="%s" "$file") while true do current_size=$(stat --format="%s" "$file") if [ $current_size -ne $previous_size ]; then echo "$(date): File size has changed from $previous_size bytes to $current_size bytes." previous_size=$current_size fi sleep 5 # 每隔5秒检查一次 done ``` 这段代码的功能包括: - 获取文件初始大小存储在 `previous_size` 中。 - 进入无限循环 (`while true`) 并定期重新读取文件大小。 - 若发现尺寸不同则记录日志消息。 - 使用 `sleep` 控制轮询频率以减少资源消耗。 --- ### 总结 以上三个案例分别体现了 `while` 循环的不同应用场景,从基础数值运算到复杂的人机互动以及实时数据跟踪。灵活运用这些技巧可以帮助开发者解决各种实际问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远不要矫情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值