Shell学习08:流程控制
2019-06-30 11:34
1221 查看
shell中的流程控制不能为空
if else
if 语句格式
if condition then command1 command2 ... commandN fi
写成一行的形式,除了最后一个fi,每个语句后面都需要加上 ;进行语句分割,否则会报错
if [ "lop" = "lop" ]; then echo "true"; fi
if else 语句格式
前面说过流程控制不能为空,即如果if条件中else 的值为空,那么else就不要写。因此if 与if else 分开来讲。
if condition then command1 command2 ... commandN else command fi
if else-if else 语句格式
if condition1 then command1 elif condition2 then command2 else commandN fi
for 循环
语句格式
for var in item1 item2 ... itemN do command1 command2 ... commandN done
实例
for loop in 1 2 3 4 5 do echo "The value is: $loop" done # 输出为 The value is: 1 The value is: 2 The value is: 3 The value is: 4 The value is: 5
也可以使用以下形式的语句
for ((i=1;i<=5;i++)) do echo $i done # 输出为 1 2 3 4 5
while 循环
用于循环判断/读取信息,直到判断条件为假时退出。语句格式:
while condition do command done
while还可以和read命令连用,用于循环读取信息
echo '按下 <CTRL-D> 退出' echo -n '输入你的名字: ' while read NAME do echo "你好!${NAME}!" done
这种方法会造成无限死循环,因此需要 CTRL-D 退出
无限循环
除了上面讲的通过while与read连用造成无限循环外,还可以使用下面几种方法进入无限循环
# 1 while : do command done # 2 while true do command done # 3 for (( ; ; ))
until 循环
与while 循环在处理方式上正好相反,until 循环执行一系列命令直至条件为 true 时停止。语句格式:condition条件为假则一直执行
until condition do command done
case
多选择语句,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。语句格式:
case 值 in 模式1) command1 command2 ... commandN ;; 模式2) command1 command2 ... commandN ;; esac
举个栗子
echo '输入 1 到 4 之间的数字:' echo '你输入的数字为:' read aNum case $aNum in 1) echo '你选择了 1' ;; 2) echo '你选择了 2' ;; 3) echo '你选择了 3' ;; 4) echo '你选择了 4' ;; *) echo '你没有输入 1 到 4 之间的数字' ;; esac
输入不同的内容,会有不同的结果,例如:
输入 1 到 4 之间的数字: 你输入的数字为: 2 你选择了 2
esac作为case 语句的结束标志,与前面if 语句的fi 异曲同工。并且每个case分支用右圆括号,用两个分号表示break。
跳出循环
break 命令
break命令允许跳出所有循环(终止执行后面的所有循环),直接上例子
#! /bin/bash while read num do echo "你输入的数字为:${num}" if [ ${num} -eq 2] then echo "输入正确!" break else echo "输入错误,请重新输入:" fi done
# 执行脚本 sh test.sh 3 # 输出为 你输入的数字为:3 输入错误,请重新输入: # 执行脚本 sh test.sh 2 # 输出为 你输入的数字为:2 输入正确!
continue 命令
与break类似,但是不会跳出所有循环,仅仅跳出当前循环。
#!/bin/bash while : do echo -n "输入 1 到 5 之间的数字: " read Num case $Num in 1|2|3|4|5) echo "你输入的数字为 $Num!" ;; *) echo "你输入的数字不是 1 到 5 之间的!" continue echo "游戏结束" ;; esac done
运行代码发现,当输入大于5的数字时,该例中的循环不会结束,语句 echo “游戏结束” 永远不会被执行。
相关文章推荐
- shell学习之-程序的流程控制(1)
- Shell学习笔记-流程控制
- Linux Bash Shell学习(九):流程控制——if/else
- java学习08--程序流程控制--判断结构
- Linux学习之Shell--第四天:Shell流程控制-循环语句for
- shell学习之-程序的流程控制
- Shell学习笔记(11)-流程控制之select、until语句
- Linux Bash Shell学习(十二):流程控制——select
- 学习笔记 shell流程控制语句 if 和 for
- Shell基础学习(六) 流程控制
- Linux Bash Shell学习(十):流程控制——for
- Shell脚本学习笔记(四)--流程控制
- shell学习之路:流程控制(if)
- shell-bash学习04读取输入、分隔符、流程控制
- shell学习之路:流程控制(for)
- Linux学习之Shell--第四天:Shell流程控制-循环语句for
- Linux学习之Shell--第五天:Shell流程控制-循环语句while
- Shell学习笔记(8)-流程控制之IF语句
- Shell学习笔记(13)-流程控制之函数
- Linux Bash Shell学习(十一):流程控制——case