一、循环语句-while
while在shell中也是负责循环的语句,和for一样。因为功能一样,很多人在学习和工作中的脚本遇到循环到底该使用for还是while呢?很多人不知道,就造就了有人一遇到循环就是for或者一位的while。我个人认为可以按照我说的这个思想来使用,既知道循环次数就可以用for,比如说一天需要循环24次;如果不知道代码要循环多少次,那就用while,比如我们作业中要求写的猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。所以这样的循环我就建议大家用while了。
1.1、while介绍
特点:条件为真就进入循环;条件为假就退出循环,一般应用在未知循环次数的环境。
1.2、while语法
while [ 表达式 ]docommand...donewhile [ 1 -eq 1 ] 或者 (( 1 > 2 ))docommandcommand...done
案例
使用for循环和while循环分别循环打印数组1-5
案例代码
for循环打印:for ((i=1;i<=5;i++))doecho $idonewhile循环打印:#打印数字1-5#!/bin/bash##Author: www.zutuanxue.com#Created Time:#Release:#Description: 打印1-5num=1while [ $num -le 5 ]doecho $numlet num++done
备注: 知道循环次数就可以用for,比如说一天需要循环24次;如果不知道代码要循环多少次,那就用while,比如我们作业中要求写的猜数字,每个人猜对一个数字的次数都是不能固定的,也是未知的。
1.3、while与shell运算
1.3.1)比较运算
案例:
循环交互输入一个小写字母,按Q退出循环
案例代码
#按Q退出场景#!/bin/bash##Author: www.zutuanxue.com#Created Time:#Release:#Description:read -p "请输入一个小写字母,按Q退出: " choosewhile [ $choose != 'Q' ]doecho "你输入的是: $choose"read -p "请输入一个小写字母,按Q退出: " choosedone
1.3.2)逻辑运算
案例:
使用循环语句帮助丈母娘批量选择女婿
案例代码
#!/bin/bash##Author: www.zutuanxue.com#Created Time:#Release:#Description:#丈母娘选女婿 分别按照姑娘20 30 40 进行与或非模拟#1.第一个应征者回答read -p "你有多少钱: " moneyread -p "你有多少车: " carread -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 "你有多少钱: " moneyread -p "你有多少车: " carread -p "你家房子有几套: " housedone#应征者满足条件echo "乖女婿,你怎么才来啊!女儿给你了"
1.3.3)文件类型判断
案例:
使用循环判断/tmp/xxx目录下的文件,如果不是文件类型的打印字符串”目录”
案例代码
文件类型判断#!/bin/bash##Author: www.zutuanxue.com#Created Time:#Release:#Description:while [ ! -f /tmp/xxx ]doecho “目录”sleep 1done
1.3.4)特殊条件
while语句中可以使用特殊条件来进行循环:
- 符号”:” 条件代表真,适用与无限循环
- 字符串 “true” 条件代表真,适用与无限循环
- 字符串 “false”条件代表假
代码展示
特殊符号 : 代表真#!/bin/bash##Author: www.zutuanxue.com#Created Time:#Release:#Description:while :doecho hahasleep 1donetrue 字符串代表真,和:类似#!/bin/bash##Author: www.zutuanxue.com#Created Time:#Release:#Description:while truedoecho hahasleep 1donefalse 字符串代表假,在while中不会开始循环
1.4、while与循环控制语句
1.4.1)sleep语句
#!/bin/bash##Author: www.zutuanxue.com#Created Time:#Release:#Description: 倒计时游戏#1.定义初始值time=9#2.循环输出,1秒一次while [ $time -ge 0 ]doecho -n -e "\b$time"let time--#控制循环 1秒一次sleep 1done#回车echo
1.4.2)break
#!/bin/bash##Author: www.zutuanxue.com#Created Time:#Release:#Description: 输出数字1-9,当输出5时停止#1、定义初始值num=1while [ $num -lt 10 ]doecho $num#判断当前num的值,如果等于5就跳出循环if [ $num -eq 5 ]thenbreakfi#自动累加let num++done
1.4.3)continue
#!/bin/bash##Author:#Created Time:#Release:#Description: 输出数字1-9,当等于5时跳过本次循环,输出1、2、3、4、6、7、8、9#1、定义初始值num=0while [ $num -lt 9 ]do#自动累加let num++#判断当前num的值,如果等于5就跳过本次循环if [ $num -eq 5 ]thencontinuefi#输出num的值echo $numdone
1.5、while嵌套其他语句
1.5.1)while嵌套if
#!/bin/bash##Author: www.zutuanxue.com#Created Time:#Release:#Description: 输出数字1-9,当输出5时停止#1、定义初始值num=1while [ $num -lt 10 ]doecho $num#判断当前num的值,如果等于5就跳出循环if [ $num -eq 5 ]thenbreakfi#自动累加let num++done
1.5.2)while嵌套for
#!/bin/bash##Author: www.zutuanxue.com#Created Time:#Release:#Description: 99乘法表A=1while [ $A -lt 10 ]dofor ((B=1;B<=$A;B++))doecho -n -e "$B*$A=$((A*B)) \t"doneecholet A++done
1.5.3)while嵌套while
#!/bin/bash##Author: www.zutuanxue.com#Created Time:#Release:#Description: 99乘法表#定义AA=1while [ $A -lt 10 ]do#定义BB=1while [ $B -le $A ]doecho -n -e "$B*$A=$((A*B)) \t"let B++doneecholet A++done
