【Shell 脚本速成】10、Shell 流程控制 while 循环

目录

一、while 介绍

1.1 while 语法

二、while 与 shell 运算

2.1 比较运算

2.2 逻辑运算

2.3 文件类型判断

2.4 特殊条件

三、while 与循环控制语句

3.1 sleep 语句

3.2 break

3.3 continue

四、while 嵌套其他语句

4.1 while 嵌套 if

4.2 while 嵌套 for 

4.3 while 嵌套 while


 

        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

案例代码

#!/bin/bash

i=1
while [ $i -le 5 ]
do
        echo $i
        let i++
        #i=$((i+1))
done

[root@shell ~]# vim while-1.sh
[root@shell ~]# sh while-1.sh
1
2
3
4
5

备注: 知道循环次数就可以用for,比如说一天需要循环24次;如果不知道代码要循环多少次,那就用while,比如猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。

二、while 与 shell 运算

2.1 比较运算

案例:
循环交互输入一个小写字母,按 Q 退出循环

[root@shell ~]# vim while-2.sh
#!/bin/bash

read -p "请输入一个字符[按'Q'退出]: " choose

while [ $choose != 'Q']
do
        echo "你输入的字符是:$choose"
        read -p "请输入一个字符[按'Q'退出]: " choose
done

[root@shell ~]# vim while-2.sh
[root@shell ~]# sh while-2.sh
请输入一个字符[按'Q'退出]: s
你输入的字符是:s
请输入一个字符[按'Q'退出]: 2
你输入的字符是:2
请输入一个字符[按'Q'退出]: e
你输入的字符是:e
请输入一个字符[按'Q'退出]: Q

2.2 逻辑运算

案例:
使用循环语句帮助丈母娘批量选择女婿

[root@shell ~]# vim while-3.sh
#!/bin/bash

#丈母娘选女婿。进行与或非模拟

# 第一个应征者回答
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 目录下的文件,如果不是文件类型的打印字符串"haha"

[root@shell ~]# vim while-4.sh
#!/bin/bash
while [ ! -f /tmp/xxx ]
 do
   echo “目录”
   sleep 1
done

[root@shell ~]# sh while-4.sh
“haha”
“haha”
“haha”
“haha”
^C

2.4 特殊条件

while 语句中可以使用特殊条件来进行循环

  • 符号 ":"  条件代表真,适用于无限循环
  • 字符串 “true” 条件代表真,适用于无限循环
  • 字符串 "false" 条件代表假
[root@shell ~]# vim while-4.sh
#!/bin/bash

#while [ ! -f /tmp/test.txt ]
while true 
do
   echo “haha”
   sleep 1
done

[root@shell ~]# sh while-4.sh
“haha”
“haha”
“haha”
“haha”
^C

三、while 与循环控制语句

3.1 sleep 语句

#!/bin/bash
#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

#!/bin/bash
#Description: 输出数字1-9,当输出5时停止

# 定义初始值
num=1

while [ $num -lt 10 ]
  do
     echo $num

     # 判断当前num的值,如果等于5就跳出循环
     if [ $num -eq 5 ]
        then
		break
     fi

     # 自动累加
     let num++
done

3.3 continue

#!/bin/bash
#Description: 输出数字1-9,当等于5时跳过本次循环,输出1、2、3、4、6、7、8、9

# 定义初始值
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

循环中需要判断的时候:

#!/bin/bash
#Description: 输出数字1-9,当输出5时停止

# 定义初始值
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 

多次循环的场景,内循环需要依赖外循环:

#!/bin/bash
#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

#!/bin/bash
#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

 上一篇文章:【Shell 脚本速成】09、Shell 循环控制语句 for_Stars.Sky的博客-CSDN博客

参考文档:流程控制-while循环-组团学

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Stars.Sky

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

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

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

打赏作者

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

抵扣说明:

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

余额充值