目录
和java,php等语言一样,shell中也包含流程控制语句,像我们经常使用的if分支、for循环等等,不同的是在shell中流程控制不能为空,而在java中是可以的,如下:
if(条件){ //语句 }else{ //这里可以为空 }
上面这个在else中没有执行任何语句,java、php等可以这么写,而在shell中不能这么写,如果else分支没有执行语句,就不要写这个else。
言归正传,现在我们就来学习吧!
分支语句(if和case)
知识是枯燥的,我们要学会苦中作乐,比如看一个段子:
老婆给当程序员的老公打电话:下班顺路买一斤包子带回来,如果看到卖西瓜的,买一个。当晚,程序员老公手捧一个包子进了家门…老婆怒道:你怎么就买了一个包子?!老公答曰:因为看到了卖西瓜的。
把程序员老婆的话当作一段需求分析一下吧。买一斤包子是一个确定无疑的需求项,无论后面是什么情况什么条件,前面这一斤包子是肯定要买的。看到卖西瓜的是一个条件判断,后面“买一个”是一个模糊不清的需求项,买一个什么呢?需求里没说啊。客户把这个当作开发人员默认了解的内容了。可是作为一个成熟合格的程序员,该老婆的丈夫应该马上跟进确认需求“买一个什么?”,要不然程序可怎么写呢?所以笑话里该程序员是不合格的,起码是不积极不负责的。在没有明确需求的情况下,他只能按照自己的理解来完成工作了。那比较可能的结果就有如下几种:
1 看到卖西瓜的,买一个西瓜
如果 看到卖西瓜的
那么
买一个西瓜
否则
买一斤包子
2 看到卖西瓜的,买一个包子
如果 看到卖西瓜的
那么
买一个包子
3 看到卖西瓜的,买一个卖西瓜的
4 看到卖西瓜的,买一个老婆一直想买的东西
5 看到卖西瓜的,随便买一个东西
上述1和2下面的条件汉字描述称之为“伪代码”,也是属于条件表达式的语法。
现在没那么苦了吧,那我们趁着甜头抓紧学习吧
1、if语句
用于根据条件执行不同的命令或代码块
1.1 单分支
语法1(一个条件):
if condition
then
command1
command2
...
fi
condition是一个条件表达式,根据表达式结果,决定是否执行command1、command2命令
[root@localhost ~]# vi 1.sh
#!/bin/bash
if [ 1 -eq 0 ] #条件判断1是否等于0
then
echo "你很帅" #因为条件为假,所以这条命令不执行
fi
if [ 1 -eq 1 ] #条件判断1是否等于1
then
echo '我很帅' #条件为真,这条命令执行
fi
1.2 双分支
语法2(两个条件):
if condition
then
command1
command2
...
else
command
fi
双分支中多了一个else,当if中条件不满足时就会执行else中的命令,通俗点就是:
if如果怎么样那就怎么样,else否则就怎么样
[root@localhost ~]# vi 2.sh
#!/bin/bash
if [ 1 -eq 0 ]
then
echo '你很帅'
else
echo '但还是没我帅'
fi
上面案例中,犹豫if条件1等于0为假,所以直接跳过if,进入到else中,输出【...没我帅】
1.3 多分支
语法3(多个条件):
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
上述语法条件又多了,当然还能更多条件判断,表示不满足if条件,那就看看elif是否满足,还是不满足继续往后面看,直至都不满足时执行else
[root@localhost ~]# vi 3.sh
#!/bin/bash
read -p '请输入考试分数:' score
#通过多分支来判断分数级别
if [ $score -ge 90 ]
then
echo '优秀'
elif [ $score -ge 80 ]
then
echo '良好'
elif [ $score -ge 70 ]
then
echo '中等'
elif [ $score -ge 60 ]
then
echo '及格'
else
echo '不及格'
fi
上述案例通过输入分数来判定级别,输入85,满足多分支中的第二个条件,所以级别为良好
以上就是if分支的基本语法,我们会发现不管时单分支、双分支还是多分支,最后都会有个fi表示结束,这个不要省略哦,不然表示你当前的if只有开始,没有结束,切记切记!
2、case语句
用于在一组值中进行选择,并执行相应的命令或代码块,一般用来做等值判断。
语法:
case expression in
pattern1)
# 执行语句块1
;;
pattern2)
# 执行语句块2
;;
pattern3)
# 执行语句块3
;;
*)
# 执行默认语句块
;;
esac
【说明】
expression
是需要匹配的表达式,根据匹配的结果执行相应的语句块。
pattern1
、pattern2
等是用来进行匹配的模式,可以使用通配符,后面必须以 右圆括号)表示此case分支的开始。;;两个分号表示break,即执行结束,跳出整个 case ... esac 语句。
esac(就是 case 反过来)作为结束标记。
[root@localhost ~]# vi 4.sh
#!/bin/bash
echo '功能[1查看信息,2修改信息,3删除信息,4添加信息]'
echo '您选择的功能是:'
read num
case $num in
1) echo '查看信息'
;;
2) echo '修改信息'
;;
3) echo '删除信息'
;;
4) echo '添加信息'
;;
*) echo '请输入正确数字1-4'
;;
esac
输入5,回执行通配符*,类似于if多分支中的else,也就是所有条件都不满足时,默认执行的一个,当然也可以没有这个默认的
输入1-4之间数字
好了,到这里分支语句就说完了,抓紧练习吧
能够给大家带来价值的话,给个三连哦😘,小的祝各位看官万福金安😊
⭐️徒手摘星,爱而不得,世人万千,再难遇我。⭐️