共计 3060 个字符,预计需要花费 8 分钟才能阅读完成。
while 在 shell 中也是负责循环的语句,和 for 一样。因为功能一样,很多人在学习和工作中的脚本遇到循环到底该使用 for 还是 while 呢?很多人不知道,就造就了有人一遇到循环就是 for 或者一位的 while。我个人认为可以按照我说的这个思想来使用,既知道循环次数就可以用 for,比如说一天需要循环 24 次;如果不知道代码要循环多少次,那就用 while,比如我们作业中要求写的猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。所以这样的循环我就建议大家用 while 了。
一、while 介绍
特点:条件为真就进入循环;条件为假就退出循环,一般应用在未知循环次数的环境。
1.1、while 语法
while [表达式] | |
do | |
command... | |
done | |
while [1 -eq 1 ] 或者 ((1 > 2 )) | |
do | |
command | |
command | |
... | |
done |
案例
使用 for 循环和 while 循环分别循环打印数组 1 -5
案例代码
for循环打印:for ((i=1;i<=5;i++)) | |
do | |
echo $i | |
done | |
while循环打印:# 打印数字 1 -5 | |
#!/bin/bash | |
# | |
#Author: www.zutuanxue.com | |
#Created Time: | |
#Release: | |
#Description: 打印 1 -5 | |
num=1 | |
while [$num -le 5 ] | |
do | |
echo $num | |
let num++ | |
done |
备注: 知道循环次数就可以用 for,比如说一天需要循环 24 次;如果不知道代码要循环多少次,那就用 while,比如我们作业中要求写的猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。
二、while 与 shell 运算
2.1、比较运算
案例:
循环交互输入一个小写字母,按 Q 退出循环
案例代码
# 按 Q 退出场景 | |
#!/bin/bash | |
# | |
#Author: www.zutuanxue.com | |
#Created Time: | |
#Release: | |
#Description: | |
read -p "请输入一个小写字母, 按 Q 退出:" choose | |
while [$choose != 'Q' ] | |
do | |
echo "你输入的是: $choose" | |
read -p "请输入一个小写字母, 按 Q 退出:" choose | |
done |
2.2、逻辑运算
案例:
使用循环语句帮助丈母娘批量选择女婿
案例代码
# | |
#Author: www.zutuanxue.com | |
#Created Time: | |
#Release: | |
#Description: | |
# 丈母娘选女婿 分别按照姑娘 20 30 40 进行与或非模拟 | |
#1. 第一个应征者回答 | |
read -p "你有多少钱:" money | |
read -p "你有多少车:" car | |
read -p "你家房子有几套:" house | |
#while [$money -lt 10000]&&[$car -lt 1]&&[$house -lt 2] | |
while [$money -lt 10000 ]||[$car -lt 1 ]||[$house -lt 2 ] | |
do | |
# 应征者不满住条件开始下一次循环 | |
echo "有请下一个" | |
read -p "你有多少钱:" money | |
read -p "你有多少车:" car | |
read -p "你家房子有几套:" house | |
done | |
# 应征者满足条件 | |
echo "乖女婿,你怎么才来啊!女儿给你了" |
2.3、文件类型判断
案例:
使用循环判断 /tmp/xxx 目录下的文件,如果不是文件类型的打印字符串 ” 目录 ”
案例代码
文件类型判断 | |
#!/bin/bash | |
# | |
#Author: www.zutuanxue.com | |
#Created Time: | |
#Release: | |
#Description: | |
while [! -f /tmp/xxx] | |
do | |
echo“目录”sleep 1 | |
done |
2.4、特殊条件
while 语句中可以使用特殊条件来进行循环:
- 符号 ”:” 条件代表真,适用与无限循环
- 字符串“true”条件代表真,适用与无限循环
- 字符串 “false” 条件代表假
代码展示
特殊符号 : 代表真 | |
#!/bin/bash | |
# | |
#Author: www.zutuanxue.com | |
#Created Time: | |
#Release: | |
#Description: | |
while : | |
do | |
echo haha | |
sleep 1 | |
done | |
true 字符串代表真,和: 类似 | |
#!/bin/bash | |
# | |
#Author: www.zutuanxue.com | |
#Created Time: | |
#Release: | |
#Description: | |
while true | |
do | |
echo haha | |
sleep 1 | |
done | |
false 字符串代表假,在 while 中不会开始循环 | |
三、while 与循环控制语句
3.1、sleep 语句
# | |
#Author: www.zutuanxue.com | |
#Created Time: | |
#Release: | |
#Description: 倒计时游戏 | |
#1. 定义初始值 | |
time=9 | |
#2. 循环输出,1 秒一次 | |
while [$time -ge 0 ] | |
do | |
echo -n -e "\b$time" | |
let time-- | |
# 控制循环 1 秒一次 | |
sleep 1 | |
done | |
# 回车 | |
echo |
3.2、break
# | |
#Author: www.zutuanxue.com | |
#Created Time: | |
#Release: | |
#Description: 输出数字 1 -9,当输出 5 时停止 | |
#1、定义初始值 | |
num=1 | |
while [$num -lt 10 ] | |
do | |
echo $num | |
# 判断当前 num 的值,如果等于 5 就跳出循环 | |
if [$num -eq 5 ] | |
then | |
break | |
fi | |
# 自动累加 | |
let num++ | |
done |
3.3、continue
# | |
#Author: | |
#Created Time: | |
#Release: | |
#Description: 输出数字 1 -9, 当等于 5 时跳过本次循环,输出 1、2、3、4、6、7、8、9 | |
#1、定义初始值 | |
num=0 | |
while [$num -lt 9 ] | |
do | |
# 自动累加 | |
let num++ | |
# 判断当前 num 的值,如果等于 5 就跳过本次循环 | |
if [$num -eq 5 ] | |
then | |
continue | |
fi | |
# 输出 num 的值 | |
echo $num | |
done |
四、while 嵌套其他语句
4.1、while 嵌套 if
# | |
#Author: www.zutuanxue.com | |
#Created Time: | |
#Release: | |
#Description: 输出数字 1 -9,当输出 5 时停止 | |
#1、定义初始值 | |
num=1 | |
while [$num -lt 10 ] | |
do | |
echo $num | |
# 判断当前 num 的值,如果等于 5 就跳出循环 | |
if [$num -eq 5 ] | |
then | |
break | |
fi | |
# 自动累加 | |
let num++ | |
done |
4.2、while 嵌套 for
# | |
#Author: www.zutuanxue.com | |
#Created Time: | |
#Release: | |
#Description: 99 乘法表 | |
A=1 | |
while [$A -lt 10 ] | |
do | |
for ((B=1;B<=$A;B++)) | |
do | |
echo -n -e "$B*$A=$((A*B)) \t" | |
done | |
echo | |
let A++ | |
done |
4.3、while 嵌套 while
# | |
#Author: www.zutuanxue.com | |
#Created Time: | |
#Release: | |
#Description: 99 乘法表 | |
# 定义 A | |
A=1 | |
while [$A -lt 10 ] | |
do | |
# 定义 B | |
B=1 | |
while [$B -le $A ] | |
do | |
echo -n -e "$B*$A=$((A*B)) \t" | |
let B++ | |
done | |
echo | |
let A++ | |
done |
五、学习视频
视频:while 介绍
视频:while 与 shell 运算
视频:while 循环控制
视频: while 嵌套
正文完
星哥玩云-微信公众号
