你会经常发现自己在尝试计算一个变量对值,在一组可能对值中寻找特定值。这这种情况下,你不得不写很长的if-then-else语句,就像下面这样
#!/bin/bash
if [ $USER = "liuyuqiang" ]
then
echo "Welcome $USER"
echo "欢迎参观"
elif [ $USER = "testing" ]
then
echo "Welcome $USER"
echo "欢迎参观"
elif [ $USER = "jessica" ]
then
echo "完成后不要忘记注销"
else
echo "对不起,你不能访问"
fi
执行:
$ ./if_then_else.sh
Welcome liuyuqiang
欢迎参观
有了case命令,就不需要再写出所有的elif语句来不停地检查用一个变量的值了,case命令会采用列表格式来检查单个变量的多个值。
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
case命令会将指定的变量与不同模式进行比较。如果变量和模式是匹配的,那么shell会执行为该模式指定的命令。可以通过竖线操作符在一行中分隔出多个匹配模式。星号会捕获所有与已知模式不匹配的值。
修改后:
#!/bin/bash
case $USER in
liuyuqiang | testing)
echo "Welcome $USER"
echo "欢迎参观";;
jessica)
echo "完成后不要忘记注销";;
*)
echo "对不起,你不能访问";;
esac
执行:
$ ./case_esac.sh
Welcome liuyuqiang
欢迎参观