码迷,mamicode.com
首页 > 系统相关 > 详细

[9-13]Shell系列3——分支结构if与case语句

时间:2015-09-21 19:40:40      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:if   case   分支   

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

知识储备


  • Shell脚本中语言结构还是那3种:顺序结构、选择结构、循环结构

  • 分支结构与选择结构是同一概念,依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序

  • If语句和Case语句是在shell中实现分支结构的具体表现形式,同C语言中的if和switch语句

  • 下面的语句我以结构流程图、代码实现[代码格式]、具体例子来阐述




If单分支结构


流程图

技术分享

代码实现

1
2
3
4
5


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

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

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

1
2
3
4
5


#!/bin/bash

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

技术分享



IF双分支结构


流程图

技术分享

代码实现    

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

技术分享



IF多分支结构


流程图

技术分享

代码实现

1
2
3
4
5
6
7
8
9


if [ expression1 ];then
    statement1
elif [ expression2 ];then
    statement2
elif [ expression3 ];then
    statement3
else
    statment4
fi

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

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

技术分享


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 逻辑或
    -! 非

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

1
2
3
4
5
6
7
8
9
10


#形式一
if [ expression ];then
    command1
fi

#形式二
if [ expression ]
then
    command1
fi



Case多分支结构


流程图

技术分享

代码实现   

1
2
3
4
5
6
7
8
9
10
11
12
13
14


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

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

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

技术分享

Case注意点

● 每一个case分支,即模式N中包含的若干指令,最后一定要以" ;; "标识该模式匹配执行结束

● 以case始,以esac终。 ---> 正好单词的倒写


If和Case的执行效率


● 通常两者区别不大,可代替使用,但是执行效率在分支众多的时候还是有区别的

计算机在处理Case分支时,会生成跳转表,根据变量的取值跳转到合适的分支,执行完毕 Over

在处理If分支的时,跳转次数不定的,是按照顺序结构一条一条判定来跳转的,比如输入成绩显示Grade那个例子而言,如果输入是95那么不用跳转1次搞定,如果是45分则需要多次跳转

总结:

    在选择分支较多时,选用case...esac结构会提高程序的效率,但不足在于只能处理字符或者数字类型的变量,

    if...else结构更加灵活一些,if...else结构可以用于判断表达式是否成立,比如if(a+b>c),if...else的应用范围更广。

本文出自 “蓝色仓库” 博客,请务必保留此出处http://bluebox.blog.51cto.com/8852456/1696838

[9-13]Shell系列3——分支结构if与case语句

标签:if   case   分支   

原文地址:http://bluebox.blog.51cto.com/8852456/1696838

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!