【shell篇】流程控制。if判断,case语句,for循环,while循环,until 循环,无限循环,跳出循环,break,continue,
文章目录
- 流程控制
- 1. if判断
- 2. case语句
-
- 2.1 基本语法
- 2.2 实操案例
- 3. for循环
-
- 3.1 语法格式1
- 3.2 语法格式2
- 3.3 实操案例1
- 3.4实操案例2
- 4. while循环
-
- 4.1 基本语法
- 4.2 实操案例
- 5. until 循环
-
- 5.1 基本语法
- 5.2 实操案例
- 6. 无限循环
-
- 6.1 基本语法
- 6.1 实操案例
- 7. 跳出循环
-
- 7.1 break命令
- 7.2 continue命令
流程控制
1. if判断
1.1 基本语法
if else
if [ 条件判断式 ];then程序fi
或者
if [ 条件判断式 ]then程序fi
if else-if else
if [ 条件判断式 ];then程序elif [ 条件判断式 ];then程序else程序fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格。
(2)if或elif后要有空格
1.2 实操案例
a=10b=20if [ $a == $b ]then echo "a 等于 b"elif [ $a -gt $b ]then echo "a 大于 b"elif [ $a -lt $b ]then echo "a 小于 b"else echo "没有符合的条件"fi
输出结果:
a 小于 b
1.3 扩展
if else 语句经常与 test 命令结合使用,如下所示:
num1=$[2*3]num2=$[1+5]if test $[num1] -eq $[num2]then echo '两个数字相等!'else echo '两个数字不相等!'fi
输出结果:
两个数字相等!
2. case语句
2.1 基本语法
case $变量名 in"值1")如果变量的值等于1,则执行;;"值2")如果变量的值等于2,则执行;;*)如果变量的值都无法匹配,则执行;;esac
注意事项:
(1)case行尾必须为单词“in”
(2)每一个模式匹配必须以英文右括号 ) 结束。
(3)双分号" ;; "表示命令序列结束,相当于java中的break。
(4)最后的"*)"表示默认模式,相当于java中的default。
2.2 实操案例
输入一个数字,如果是1,则输出banzhang,如果是2,则输出cls,如果是其它,输出renyao。
[root@jiangnan data]# vi if3.sh[root@jiangnan data]# cat if3.sh #!/bin/bashcase $1 in"1")echo "banzhang";;"2")echo "cls";;*)echo "renyao";;esac[root@jiangnan data]# sh if3.sh 1banzhang[root@jiangnan data]#
类比java中的switch…case语法
3. for循环
3.1 语法格式1
for var in item1 item2 ... itemNdo 程序done
3.2 语法格式2
for ((初始值;循环控制条件;变量变化)) do 程序done
3.3 实操案例1
for var in 1 2 3 4 5do echo "The value is: $var"done
输出结果:
The value is: 1The value is: 2The value is: 3The value is: 4The value is: 5
3.4实操案例2
从1加到100
[root@jiangnan data]# vi for1.sh[root@jiangnan data]# cat for1.sh #!/bin/bashs=0for ((i=0;i<=100;i++))dos=$[$s+$i]doneecho $s[root@jiangnan data]# sh for1.sh 5050[root@jiangnan data]#
注意:我们在之前的文章中说过了在使用for循环时带参数的情况,注意$@和$*的区别,可以看我之前的文章https://blog.csdn.net/weixin_45842494/article/details/123490655
4. while循环
4.1 基本语法
while [ 条件判断式 ]do程序done
4.2 实操案例
从1加到100
[root@jiangnan data]# vi while.sh[root@jiangnan data]# cat while.sh #!/bin/bashs=0i=1while [ $i -le 100 ]dos=$[$s+$i]i=$[$i+1]doneecho $s[root@jiangnan data]# sh while.sh 5050[root@jiangnan data]#
5. until 循环
until 循环执行一系列命令直至条件为 true 时停止。
until 循环与 while 循环在处理方式上刚好相反。
5.1 基本语法
until [ 条件判断式 ]do程序done
5.2 实操案例
从1到100求和
[root@jiangnan data]# vi until.sh [root@jiangnan data]# cat until.sh #!/bin/basha=0s=0until [ ! $a -le 100 ]dos=$[$s+$a]a=$[$a+1]doneecho $s[root@jiangnan data]# sh until.sh 5050[root@jiangnan data]#
6. 无限循环
6.1 基本语法
while :do程序done
或者
while truedo程序done
或者
for (( ; ; ))do程序done
6.1 实操案例
[root@jiangnan data]# vi for2.sh [root@jiangnan data]# cat for2.sh #!/bin/bashfor (( ; ; ))do echo "I love China"done[root@jiangnan data]# sh for2.shI love ChinaI love ChinaI love China......
7. 跳出循环
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue。
7.1 break命令
break命令允许跳出所有循环(终止执行后面的所有循环)。
下面的例子中,脚本进入死循环直至用户输入数字大于5。要跳出这个循环,返回到shell提示符下,需要使用break命令。
#!/bin/bashwhile :do echo -n "输入 1 到 5 之间的数字:" read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束" break ;; esacdone
执行以上代码,输出结果为:
输入 1 到 5 之间的数字:3你输入的数字为 3!输入 1 到 5 之间的数字:7你输入的数字不是 1 到 5 之间的! 游戏结束
7.2 continue命令
continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
对上面的例子进行修改:
#!/bin/bashwhile :do echo -n "输入 1 到 5 之间的数字: " read aNum case $aNum in 1|2|3|4|5) echo "你输入的数字为 $aNum!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esacdone
运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句 echo “游戏结束” 永远不会被执行。
类比java中的break和continue
微信公众号先已开通,搜索 “江小南和他的小伙伴们” 就能找到我哦,各位小伙伴们可以关注一下,文章会进行同步更新,方便查看哦。