前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[9-13]Shell系列3——分支结构

[9-13]Shell系列3——分支结构

作者头像
py3study
发布2020-01-15 11:37:26
5690
发布2020-01-15 11:37:26
举报
文章被收录于专栏:python3python3

本文旨在复习shell实现分支结构的3种if语句和case多分支结构语句,以及补充if和case的执行效率

知识储备


  • Shell脚本中语言结构还是那3种:顺序结构、选择结构、循环结构
  • 分支结构选择结构是同一概念,依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序
  • If语句和Case语句是在shell中实现分支结构的具体表现形式,同C语言中的if和switch语句
  • 下面的语句我以结构流程图、代码实现[代码格式]、具体例子来阐述

IF单分支结构


流程图

wKioL1X_uuLwyqasAALMPJ7eTwo772.bmp
wKioL1X_uuLwyqasAALMPJ7eTwo772.bmp

代码实现

12345

if [ expression ];then    statement1    statement2    ......fi

具体例子:如果当前年份是2015就显示"你要好好学习了!"

请注意[ expression ]表达式前后有空格!否则语法错误

12345

#!/bin/bashif [ $(date +%Y) -eq 2015 ];then        echo "You should study hard!"fi

wKiom1X_vNbA4GCTAAQUgCxN1fY292.bmp
wKiom1X_vNbA4GCTAAQUgCxN1fY292.bmp

IF双分支结构


流程图

wKiom1X_vr-zWjjcAAUPqK9EKM4986.bmp
wKiom1X_vr-zWjjcAAUPqK9EKM4986.bmp

代码实现

1234567

if [ expreesion ];then    statment1    ......else    statement2    ......fi

具体例子:读取用户输入的两个数,比较输出大数

12345678

#!/bin/bashread -p "Enter 2 Number: " a bif [ $a -ge $b ];then    echo "$a"else    echo "$b"fi

wKioL1X_wjjiM9X3AAN6OHVfAVU933.bmp
wKioL1X_wjjiM9X3AAN6OHVfAVU933.bmp

IF多分支结构


流程图

wKioL1X_xZnRwFs0AAvFgMqXFhw221.bmp
wKioL1X_xZnRwFs0AAvFgMqXFhw221.bmp

代码实现

123456789

if   [ expression1 ];then    statement1elif [ expression2 ];then    statement2elif [ expression3 ];then    statement3else    statment4fi

具体例子:输入考试分数,90分[含]以上为A等,80-90为B等,60-80为C等,60以下为D等

123456789101112

#!/bin/bashread -p "Enter your Score: " scoreif [ $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

wKiom1X_xZjiBEs_AAVlqGYaVq8250.bmp
wKiom1X_xZjiBEs_AAVlqGYaVq8250.bmp

IF注意点

● 判断条件可以使用[ expression ]` expression `两种,效果通常一致但有特殊情况,` `是关键字,对于字符串判断更好,建议都使用` `这种

● ` `中的判断条件可以使用逻辑运算将多个expression组合起来,比如

123456789

#当且仅当满足exp1和exp2时候才会执行command1if [ expression1 -a expression2 ];then    command1fi#常用的逻辑运算符    -a 逻辑与    -o 逻辑或    -! 非

● 上面介绍了If语句实现分支的3种结构,If语句有2种写法

12345678910

#形式一if [ expression ];then    command1fi#形式二if [ expression ]then    command1fi

Case多分支结构


流程图

wKioL1X_z7ejtd7nAAvRfGuWdVs731.bmp
wKioL1X_z7ejtd7nAAvRfGuWdVs731.bmp

代码实现

1234567891011121314

case 值 in模式1)    command1    ......    ;;模式2)    command1    ......    ;;    *)    command1    ......    ;;esac

具体例子:用户输入数字1-3中的一个,若存在则返回该数字,否则报错

1234567891011121314151617

#!/bin/bashread -p "Enter a Number 1-3: " numcase $num in1)    echo "1"    ;;2)    echo "2"    ;;3)     echo "3"    ;;*)    echo "Please Be sure the number from 1-3"    ;;esac

wKioL1X_0Yey7LieAAWbWDwTxcg068.bmp
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的应用范围更广。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档