[9-13]Shell系列3――分支结构if与case语句
2015-09-21 17:41
961 查看
本文旨在复习shell实现分支结构的3种if语句和case多分支结构语句,以及补充if和case的执行效率
知识储备
Shell脚本中语言结构还是那3种:顺序结构、选择结构、循环结构
分支结构与选择结构是同一概念,依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序
If语句和Case语句是在shell中实现分支结构的具体表现形式,同C语言中的if和switch语句
下面的语句我以结构流程图、代码实现[代码格式]、具体例子来阐述
IF单分支结构
流程图
![](http://s3.51cto.com/wyfs02/M01/73/7F/wKioL1X_uuLwyqasAALMPJ7eTwo772.bmp)
代码实现
具体例子:如果当前年份是2015就显示"你要好好学习了!"
请注意[ expression ]表达式前后有空格!否则语法错误
![](http://s3.51cto.com/wyfs02/M02/73/82/wKiom1X_vNbA4GCTAAQUgCxN1fY292.bmp)
IF双分支结构
流程图
![](http://s3.51cto.com/wyfs02/M01/73/82/wKiom1X_vr-zWjjcAAUPqK9EKM4986.bmp)
代码实现
具体例子:读取用户输入的两个数,比较输出大数
![](http://s3.51cto.com/wyfs02/M02/73/80/wKioL1X_wjjiM9X3AAN6OHVfAVU933.bmp)
IF多分支结构
流程图
![](http://s3.51cto.com/wyfs02/M02/73/80/wKioL1X_xZnRwFs0AAvFgMqXFhw221.bmp)
代码实现
具体例子:输入考试分数,90分[含]以上为A等,80-90为B等,60-80为C等,60以下为D等
![](http://s3.51cto.com/wyfs02/M01/73/82/wKiom1X_xZjiBEs_AAVlqGYaVq8250.bmp)
IF注意点
● 判断条件可以使用[ expression ]和[[ expression ]]两种,效果通常一致但有特殊情况,[[ ]]是关键字,对于字符串判断更好,建议都使用[[ ]]这种
● [[ ]]中的判断条件可以使用逻辑运算将多个expression组合起来,比如
● 上面介绍了If语句实现分支的3种结构,If语句有2种写法
Case多分支结构
流程图
![](http://s3.51cto.com/wyfs02/M00/73/81/wKioL1X_z7ejtd7nAAvRfGuWdVs731.bmp)
代码实现
具体例子:用户输入数字1-3中的一个,若存在则返回该数字,否则报错
![](http://s3.51cto.com/wyfs02/M02/73/81/wKioL1X_0Yey7LieAAWbWDwTxcg068.bmp)
Case注意点
● 每一个case分支,即模式N中包含的若干指令,最后一定要以" ;; "标识该模式匹配执行结束
● 以case始,以esac终。 ---> 正好单词的倒写
If和Case的执行效率
● 处理Case分支时:计算机会生成跳转表,根据变量的取值跳转到合适的分支,执行完毕 Over
● 处理If分支的时:跳转次数不定的,是按照顺序结构一条一条判定来跳转的,比如输入成绩显示Grade那个例子而言,如果输入是95那么不用跳转1次搞定,如果是45分则需要多次跳转
● 总结:
<1>分支较多时,选用case...esac结构会提高程序的效率,但不足在于只能处理字符或者数字类型的变量,
<2>if...else结构更灵活,if...else结构可以用于判断表达式是否成立,比如if(a+b>c),if...else的应用范围更广。
本文出自 “蓝色仓库” 博客,请务必保留此出处http://bluebox.blog.51cto.com/8852456/1696838
知识储备
Shell脚本中语言结构还是那3种:顺序结构、选择结构、循环结构
分支结构与选择结构是同一概念,依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序
If语句和Case语句是在shell中实现分支结构的具体表现形式,同C语言中的if和switch语句
下面的语句我以结构流程图、代码实现[代码格式]、具体例子来阐述
IF单分支结构
流程图
![](http://s3.51cto.com/wyfs02/M01/73/7F/wKioL1X_uuLwyqasAALMPJ7eTwo772.bmp)
代码实现
1 2 3 4 5 | if [ expression ];then statement1 statement2 ...... fi |
请注意[ expression ]表达式前后有空格!否则语法错误
1 2 3 4 5 | #!/bin/bash if [ $(date +%Y) -eq 2015 ];then echo "You should study hard!" fi |
![](http://s3.51cto.com/wyfs02/M02/73/82/wKiom1X_vNbA4GCTAAQUgCxN1fY292.bmp)
IF双分支结构
流程图
![](http://s3.51cto.com/wyfs02/M01/73/82/wKiom1X_vr-zWjjcAAUPqK9EKM4986.bmp)
代码实现
1 2 3 4 5 6 7 | if [ expreesion ];then statment1 ...... else statement2 ...... fi |
1 2 3 4 5 6 7 8 | #!/bin/bash read -p "Enter 2 Number: " a b if [ $a -ge $b ];then echo "$a" else echo "$b" fi |
![](http://s3.51cto.com/wyfs02/M02/73/80/wKioL1X_wjjiM9X3AAN6OHVfAVU933.bmp)
IF多分支结构
流程图
![](http://s3.51cto.com/wyfs02/M02/73/80/wKioL1X_xZnRwFs0AAvFgMqXFhw221.bmp)
代码实现
1 2 3 4 5 6 7 8 9 | if [ expression1 ];then statement1 elif [ expression2 ];then statement2 elif [ expression3 ];then statement3 else statment4 fi |
1 2 3 4 5 6 7 8 9 10 11 12 | #!/bin/bash read -p "Enter your Score: " score if [ $score -ge 90 ];then echo "Grade A" elif [ $score -ge 80 ];then echo "Grade B" elif [ $score -ge 60 ];then echo "Grade C" else echo "Grade D" fi |
![](http://s3.51cto.com/wyfs02/M01/73/82/wKiom1X_xZjiBEs_AAVlqGYaVq8250.bmp)
IF注意点
● 判断条件可以使用[ expression ]和[[ expression ]]两种,效果通常一致但有特殊情况,[[ ]]是关键字,对于字符串判断更好,建议都使用[[ ]]这种
● [[ ]]中的判断条件可以使用逻辑运算将多个expression组合起来,比如
1 2 3 4 5 6 7 8 9 | #当且仅当满足exp1和exp2时候才会执行command1 if [ expression1 -a expression2 ];then command1 fi #常用的逻辑运算符 -a 逻辑与 -o 逻辑或 -! 非 |
1 2 3 4 5 6 7 8 9 10 | #形式一 if [ expression ];then command1 fi #形式二 if [ expression ] then command1 fi |
流程图
![](http://s3.51cto.com/wyfs02/M00/73/81/wKioL1X_z7ejtd7nAAvRfGuWdVs731.bmp)
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | case 值 in 模式1) command1 ...... ;; 模式2) command1 ...... ;; *) command1 ...... ;; esac |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/bin/bash read -p "Enter a Number 1-3: " num case $num in 1) echo "1" ;; 2) echo "2" ;; 3) echo "3" ;; *) echo "Please Be sure the number from 1-3" ;; esac |
![](http://s3.51cto.com/wyfs02/M02/73/81/wKioL1X_0Yey7LieAAWbWDwTxcg068.bmp)
Case注意点
● 每一个case分支,即模式N中包含的若干指令,最后一定要以" ;; "标识该模式匹配执行结束
● 以case始,以esac终。 ---> 正好单词的倒写
If和Case的执行效率
● 处理Case分支时:计算机会生成跳转表,根据变量的取值跳转到合适的分支,执行完毕 Over
● 处理If分支的时:跳转次数不定的,是按照顺序结构一条一条判定来跳转的,比如输入成绩显示Grade那个例子而言,如果输入是95那么不用跳转1次搞定,如果是45分则需要多次跳转
● 总结:
<1>分支较多时,选用case...esac结构会提高程序的效率,但不足在于只能处理字符或者数字类型的变量,
<2>if...else结构更灵活,if...else结构可以用于判断表达式是否成立,比如if(a+b>c),if...else的应用范围更广。
本文出自 “蓝色仓库” 博客,请务必保留此出处http://bluebox.blog.51cto.com/8852456/1696838
相关文章推荐
- Bash中的字符串变量扩展
- [bash]正则表达式、BRE模式
- 【一天一个shell命令】好管家-历史信息-history
- [9-13]Shell系列2――变量基础
- sed awk shell传参问题
- shell的详细介绍和编程(中)
- Xshell的sublime主题配色
- [9-13]Shell系列1――基本概念
- shell 环境初始化顺序
- Mysql 数据库自动备份Shell脚本
- Powershell DSC 5.0 - Push 模式
- SharePoint自动化系列——通过PowerShell创建SharePoint Web
- Shell - linux中的&& 和 ||
- PowerShell 3.0管理Hyper-V 3.0
- 如何调试bash脚本
- Windows 8 中的 PowerShell 3.0
- shell 快捷键
- Shell - 判断语句
- Shell - 比较
- 2015年9月13日-9月15日课程作业(shell)脚本实例