40. case 命令
语法:
case var in
pattern1 )
command1
command2
...
;;
pattern2 )
command3
command4
...
;;
esac
- 如果
var
的值与pattern1
匹配,它将执行 command1、command2 以及pattern1
块中的任何其他命令。 - 如果
var
的值与pattern2
匹配,它将执行 command3、command4 以及pattern2
块中的任何其他命令。 case
语句以esac
结尾,它只不过是单词case
的倒序写法。- 每组命令应以两个分号(
;;
) 结尾。
这个简单的案例示例根据命令行上给出的参数设置变量
state
和
capital
。
$ cat case1.sh
stateabbr=${1}
case $stateabbr in
CA )
state="California"
capital="Sacramento"
;;
NV )
state="Nevada"
capital="Carson City"
;;
esac
echo "$state Capital is $capital"
$ ./case1.sh CA
California Capital is Sacramento
在上面的示例中,当
stateabbr
的值为 “CA” 时,bash 执行模式 “CA” 下的两个命令。
它会跳过此后的其他情况,在esac
语句之后继续。
case
通常用于创建供用户选择的菜单:
$ cat case2.sh
echo "MAIN MENU"
echo "---------"
echo "a. Backup Log files"
echo "b. Backup Config files"
echo "c. Backup Home Directory"
echo "d. Exit"
echo "Enter your choice:"
read choice
case $choice in
a | A ) echo "Backing up log files..";;
b | B ) echo "Backing up config files..";;
c | C ) echo "Backing up home directory..";;
d | D ) exit;;
* ) echo "Invalid choice!";;
esac
在上面的示例中,模式不仅仅包含一个值。 它有多个值。 例如a | A )
,表示无论用户输入 a 还是 A,都将执行该模式中的命令。
上面列表中的最后一个模式是*)
,它匹配任何字符。
当到达这里时,这意味着在这一点之前没有任何模式是匹配的。 因此,这应该是用户输入的无效值。