以下内容源于C语言中文网的学习与整理,如有侵权,请告知删除。
和其它编程语言类似,Shell 支持选择结构,分别是 if else 语句和 case in 语句。
一、if else语句
1、if … fi 语句
(1)该语句的格式如下,其中
condition
是判断条件,如果 condition 成立(返回“真”),那么 then 后边的语句将会被执行;如果 condition 不成立(返回“假”),那么不会执行任何语句。if condition then statement(s) fi #或者 if condition; then statement(s) fi
(2)下面的例子使用 if 语句来比较两个数字的大小。
(())
是一种数学计算命令,它除了可以进行最基本的加减乘除运算,还可以进行大于、小于、等于等关系运算,以及与、或、非逻辑运算。当 a 和 b 相等时,(( $a == $b ))
判断条件成立,进入 if,执行 then 后边的 echo 语句。xjh@ubuntu:~/iot/tmp$ cat test.sh #!/bin/bash read a read b if (( $a == $b )) then echo "a和b相等" fi xjh@ubuntu:~/iot/tmp$ ./test.sh 34 34 a和b相等 xjh@ubuntu:~/iot/tmp$
2、if … else … fi 语句
(1)如果有两个分支,就可以使用 if else 语句,它的格式如下。其中如果 condition 成立,那么 then 后边的 statement1 语句将会被执行;否则,执行 else 后边的 statement2 语句。
if condition then statement1 else statement2 fi
#!/bin/bash read a read b if (( $a == $b )) then echo "a和b相等" else echo "a和b不相等,输入错误" fi
3、if … elif … else … fi 语句
(1)当分支比较多时可以使用 if elif else 结构,格式如下,注意 if 和 elif 后边都得跟着 then。
if condition1 then statement1 elif condition2 then statement2 elif condition3 then statement3 …… else statementn fi
#!/bin/bash read age if (( $age <= 2 )); then echo "婴儿" elif (( $age >= 3 && $age <= 8 )); then echo "幼儿" elif (( $age >= 9 && $age <= 17 )); then echo "少年" elif (( $age >= 18 && $age <=25 )); then echo "成年" elif (( $age >= 26 && $age <= 40 )); then echo "青年" elif (( $age >= 41 && $age <= 60 )); then echo "中年" else echo "老年" fi
二、case in语句
当分支较多,并且判断条件比较简单时,使用 case in 语句就比较方便了。
1、case in语句的格式
case expression in pattern1) statement1 ;; pattern2) statement2 ;; pattern3) statement3 ;; #其他pattern情形 *) statementn esac
- case、in 和 esac 都是 Shell 关键字,expression 表示表达式,pattern 表示匹配模式。
- expression 既可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要能够得到 expression 的值就可以。
- pattern 可以是一个数字、一个字符串,甚至是一个简单的正则表达式。有时候相近的内容作为一个pattern时,这些内容以“|”隔开,比如 y|yes|YES)。
- 如果 expression 和某个模式匹配成功,就会执行这模式后面对应的所有语句(该语句可以有一条,也可以有多条),直到遇见双分号
;;
才停止;然后整个 case 语句就执行完了,程序会跳出整个 case 语句,执行 esac 后面的其它语句。- 如果 expression 没有匹配到任何一个模式,那么就执行
*)
后面的语句,直到遇见双分号;;
或者esac
才结束。最后一个分支可以写;;
,也可以不写,因为无论如何,执行到 esac 都会结束整个 case in 语句。- 最后一个分支
*)
并不是什么语法规定,它只是一个正则表达式,*
表示任意字符串,所以不管 expression 的值是什么,*)
总能匹配成功。xjh@ubuntu:~/iot/tmp$ cat test.sh #!/bin/bash printf "Input integer number: " read num case $num in 1) echo "Monday" ;; 2) echo "Tuesday" ;; 3) echo "Wednesday" ;; 4) echo "Thursday" ;; 5) echo "Friday" ;; 6) echo "Saturday" ;; 7) echo "Sunday" ;; *) echo "error" esac xjh@ubuntu:~/iot/tmp$ ./test.sh Input integer number: 3 Wednesday xjh@ubuntu:~/iot/tmp$ ./test.sh Input integer number: 9 error xjh@ubuntu:~/iot/tmp$
2、case in 与正则表达式
(1)case in 的 pattern 部分支持简单的正则表达式,具体来说,可以使用以下几种格式:
格式 说明 * 表示任意字符串。 [abc] 表示 a、b、c 三个字符中的任意一个。比如,[15ZH] 表示 1、5、Z、H 四个字符中的任意一个。 [m-n] 表示从 m 到 n 的任意一个字符。比如,[0-9] 表示任意一个数字,[0-9a-zA-Z] 表示字母或数字。 | 表示多重选择,类似逻辑运算中的或运算。比如,abc | xyz 表示匹配字符串 “abc” 或者 “xyz”。 xjh@ubuntu:~/iot/tmp$ cat test.sh #!/bin/bash printf "Input a character: " read -n 1 char case $char in [a-zA-Z]) printf "nlettern" ;; [0-9]) printf "nDigitn" ;; [,.?!]) printf "nPunctuationn" ;; *) printf "nerrorn" esac xjh@ubuntu:~/iot/tmp$ ./test.sh Input a character: ? Punctuation xjh@ubuntu:~/iot/tmp$ ./test.sh Input a character: 8 Digit xjh@ubuntu:~/iot/tmp$ ./test.sh Input a character: [ error xjh@ubuntu:~/iot/tmp$
原文地址:https://blog.csdn.net/oqqHuTu12345678/article/details/125662997
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_37410.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!