case
是Bash
中很实用的命令。
基本结构
#!/bin/bash
read -p "你喜欢什么颜色:" color
case $color in
red) echo -e "\e[1;31m你喜欢红色\e[0m";;
green) echo -e "\e[1;32m你喜欢绿色\e[0m";;
yellow) echo -e "\e[1;33m你喜欢黄色\e[0m";;
blue) echo -e "\e[1;34m你喜欢蓝色\e[0m";;
*) echo -e "\e[1;30m这是什么颜色?\e[0m";;
esac
这段代码,就是根据你的输入来显示不同颜色的文本,把变量color的值,依次和下面右括号里的值做比较,如果相同,就执行后面的语句。
;;
注意每个条件末尾都是两个分号。这很好理解,因为每个条件满足的时候,需要执行的语句可能不止一句。而在bash中多个语句在一行是用一个分号间隔的。可以理解为C语言的switch
中的break
。
;&
#!/bin/bash
read -p "你喜欢什么颜色:" color
case $color in
red) echo -e "\e[1;31m你喜欢红色\e[0m";&
green) echo -e "\e[1;32m你喜欢绿色\e[0m";&
yellow) echo -e "\e[1;33m你喜欢黄色\e[0m";&
blue) echo -e "\e[1;34m你喜欢蓝色\e[0m";;
*) echo -e "\e[1;30m这是什么颜色?\e[0m";;
esac
如果将;;
替换成;&
那么在执行完匹配的语句后,将接着执行,而不管下面的条件匹配不匹配,直到遇到;;
为止。
;;&
#!/bin/bash
read -p "请输入一个区号:" num
case $num in
*)echo -n "中国";;&
03*)echo -n "河北省";;&
??10)echo "邯郸市";;
??11)echo "石家庄";;
??17)echo "沧州市";;
07*)echo -n "江西省";;&
??91)echo "南昌市";;
??92)echo "九江市";;
??97)echo "赣州市";;
esac
条件语句以;;&
结束的时候,程序执行到这里不会停止,会继续测试下面条件,如果满足继续执行,直到遇到;;
或esac
右括号中的表达式
*
是匹配0个或多个任何字符。?
是匹配一个字符。[]
表示一个范围。如[0-9]
、[a-zA-Z]
|
分隔的多个表达式。如yes|YES
无论是输入yes
还是YES
都可以被匹配。
No comments:
Post a Comment