shell脚本--流程控制-while循环

打印 上一主题 下一主题

主题 827|帖子 827|积分 2481

while在shell中也是负责循环的语句,和for一样。由于功能一样,许多人在学习和工作中的脚本遇到循环到底该利用for还是while呢?许多人不知道,就作育了有人一遇到循环就是for或者一位的while。我个人认为可以按照我说的这个思想来利用,既知道循环次数就可以用for,比如说一天需要循环24次;如果不知道代码要循环多少次,那就用while,比如我们作业中要求写的猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。所以如许的循环我就发起大家用while了。
一、while介绍

特点:条件为真就进入循环;条件为假就退出循环,一般应用在未知循环次数的环境。
1.1、while语法

  1. while [ 表达式 ]
  2.     do
  3.         command...
  4.     done
  5.    
  6. while  [ 1 -eq 1 ]    或者 (( 1 > 2 ))
  7.   do
  8.     command
  9.     command
  10.     ...
  11. done
复制代码
案例 利用for循环和while循环分别循环打印数组1-5
案例代码
  1. for循环打印:
  2. for ((i=1;i<=5;i++))
  3. do
  4.     echo $i
  5. done
  6. while循环打印:
  7. #打印数字1-5
  8. #!/bin/bash
  9. #
  10. #Author: www.zutuanxue.com
  11. #Created Time:
  12. #Release:
  13. #Description: 打印1-5
  14. num=1
  15. while [ $num -le 5 ]
  16.   do
  17.      echo $num
  18.      let num++
  19. done
复制代码
备注: 知道循环次数就可以用for,比如说一天需要循环24次;如果不知道代码要循环多少次,那就用while,比如我们作业中要求写的猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。
二、while与shell运算

2.1、比较运算

案例: 循环交互输入一个小写字母,按Q退出循环
案例代码
  1. #按Q退出场景
  2. #!/bin/bash
  3. #
  4. #Author: www.zutuanxue.com
  5. #Created Time:
  6. #Release:
  7. #Description:
  8. read -p "请输入一个小写字母,按Q退出: " choose
  9. while [ $choose != 'Q' ]
  10.   do
  11.     echo "你输入的是: $choose"
  12.     read -p "请输入一个小写字母,按Q退出: " choose
  13. done
复制代码
2.2、逻辑运算

案例: 利用循环语句帮助丈母娘批量选择女婿
案例代码
  1. #!/bin/bash
  2. #
  3. #Author: www.zutuanxue.com
  4. #Created Time:
  5. #Release:
  6. #Description:
  7. #丈母娘选女婿  分别按照姑娘20  30   40 进行与或非模拟
  8. #1.第一个应征者回答
  9. read -p "你有多少钱: " money
  10. read -p "你有多少车: " car
  11. read -p "你家房子有几套: " house
  12. #while [ $money -lt 10000 ]&&[ $car -lt 1 ]&&[ $house -lt 2 ]
  13. while [ $money -lt 10000 ]||[ $car -lt 1 ]||[ $house -lt 2 ]
  14.   do
  15.     #应征者不满住条件开始下一次循环
  16.     echo "有请下一个"
  17.     read -p "你有多少钱: " money
  18.     read -p "你有多少车: " car
  19.     read -p "你家房子有几套: " house
  20. done
  21. #应征者满足条件
  22. echo  "乖女婿,你怎么才来啊!女儿给你了"
复制代码
2.3、文件范例判断

案例: 利用循环判断/tmp/xxx目录下的文件,如果不是文件范例的打印字符串"目录"
案例代码
  1. 文件类型判断
  2. #!/bin/bash
  3. #
  4. #Author: www.zutuanxue.com
  5. #Created Time:
  6. #Release:
  7. #Description:
  8. while [ ! -f /tmp/xxx ]
  9. do
  10.   echo “目录”
  11.   sleep 1
  12. done
复制代码
2.4、特殊条件

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


  • 符号":" 条件代表真,适用与无穷循环
  • 字符串 “true” 条件代表真,适用与无穷循环
  • 字符串 "false"条件代表假
代码展示
  1. 特殊符号 :  代表真
  2. #!/bin/bash
  3. #
  4. #Author: www.zutuanxue.com
  5. #Created Time:
  6. #Release:
  7. #Description:
  8. while :
  9. do
  10.   echo haha
  11.   sleep 1
  12. done
  13. true 字符串代表真,和:类似
  14. #!/bin/bash
  15. #
  16. #Author: www.zutuanxue.com
  17. #Created Time:
  18. #Release:
  19. #Description:
  20. while true
  21. do
  22.   echo haha
  23.   sleep 1
  24. done
  25. false   字符串代表假,在while中不会开始循环
复制代码
三、while与循环控制语句

3.1、sleep语句

  1. #!/bin/bash
  2. #
  3. #Author: www.zutuanxue.com
  4. #Created Time:
  5. #Release:
  6. #Description: 倒计时游戏
  7. #1.定义初始值
  8. time=9
  9. #2.循环输出,1秒一次
  10. while [ $time -ge 0 ]
  11.   do
  12.     echo -n -e  "\b$time"
  13.     let time--
  14.     #控制循环 1秒一次
  15.     sleep 1
  16. done
  17. #回车
  18. echo
复制代码
3.2、break

  1. #!/bin/bash
  2. #
  3. #Author: www.zutuanxue.com
  4. #Created Time:
  5. #Release:
  6. #Description: 输出数字1-9,当输出5时停止
  7. #1、定义初始值
  8. num=1
  9. while [ $num -lt 10 ]
  10.   do
  11.     echo $num
  12.     #判断当前num的值,如果等于5就跳出循环
  13.     if [ $num -eq 5 ]
  14.        then
  15.         break
  16.     fi
  17.     #自动累加
  18.     let num++
  19. done
复制代码
3.3、continue

  1. #!/bin/bash
  2. #
  3. #Author:
  4. #Created Time:
  5. #Release:
  6. #Description: 输出数字1-9,当等于5时跳过本次循环,输出1、2、3、4、6、7、8、9
  7. #1、定义初始值
  8. num=0
  9. while [ $num -lt 9 ]
  10.   do
  11.      #自动累加
  12.      let num++
  13.      
  14.      #判断当前num的值,如果等于5就跳过本次循环
  15.      if [ $num -eq 5 ]
  16.         then
  17.                 continue
  18.      fi
  19.      #输出num的值
  20.      echo $num
  21. done
复制代码
四、while嵌套其他语句

4.1、while嵌套if

  1. #!/bin/bash
  2. #
  3. #Author: www.zutuanxue.com
  4. #Created Time:
  5. #Release:
  6. #Description: 输出数字1-9,当输出5时停止
  7. #1、定义初始值
  8. num=1
  9. while [ $num -lt 10 ]
  10.   do
  11.      echo $num
  12.      #判断当前num的值,如果等于5就跳出循环
  13.      if [ $num -eq 5 ]
  14.         then
  15.                 break
  16.      fi
  17.      #自动累加
  18.      let num++
  19. done
复制代码
4.2、while嵌套for

  1. #!/bin/bash
  2. #
  3. #Author: www.zutuanxue.com
  4. #Created Time:
  5. #Release:
  6. #Description: 99乘法表
  7. A=1
  8. while [ $A -lt 10 ]
  9.   do
  10.     for ((B=1;B<=$A;B++))
  11.        do
  12.           echo -n -e "$B*$A=$((A*B)) \t"
  13.    done
  14.    echo
  15.    let A++
  16. done
复制代码
4.3、while嵌套while

  1. #!/bin/bash
  2. #
  3. #Author: www.zutuanxue.com
  4. #Created Time:
  5. #Release:
  6. #Description: 99乘法表
  7. #定义A
  8. A=1
  9. while [ $A -lt 10 ]
  10.   do
  11.       #定义B
  12.       B=1
  13.       while [ $B -le $A ]
  14.         do
  15.           echo -n -e "$B*$A=$((A*B)) \t"
  16.           let B++
  17.       done
  18.    echo
  19.    let A++
  20. done
复制代码
五、学习视频

视频:while介绍 视频:while与shell运算 视频:while循环控制 视频: while嵌套

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表