本篇內(nèi)容均摘自《Linux命令行與shell腳本編程大全》吹零,個人認為需要重點學(xué)習(xí)的章節(jié)。【免費】Linux命令行與Shell腳本編程大全 第3版 PDF全本 21MB 百度網(wǎng)盤下載 - 今夕是何夕 - 博客園
你會經(jīng)常發(fā)現(xiàn)自己在嘗試計算一個變量的值拉庵,在一組可能的值中尋找特定值灿椅。在這種情形下,你不得不寫出很長的if-then-else語句钞支,就像下面這樣茫蛹。
$ cat test25.sh
#!/bin/bash
if [ $USER = "rich" ]
then
echo "Welcome $USER"
echo "Please enjoy your visit"
elif [ $USER = "barbara" ]
then
echo "Welcome $USER"
echo "Please enjoy your visit"
elif [ $USER = "testing" ]
then
echo "Special testing account"
elif [ $USER = "jessica" ]
then
echo "Do not forget to logout when you're done"
else
echo "Sorry, you are not allowed here"
fi
$ ./test25.sh
Welcome rich
Please enjoy your visit
elif語句繼續(xù)if-then檢查,為比較變量尋找特定的值烁挟。
有了case命令婴洼,就不需要再寫出所有的elif語句來不停地檢查同一個變量的值了。 case命令會采用列表格式來檢查單個變量的多個值撼嗓。
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
case命令會將指定的變量與不同模式進行比較柬采。如果變量和模式是匹配的欢唾,那么shell會執(zhí)行為該模式指定的命令》勰恚可以通過豎線操作符在一行中分隔出多個模式模式匈辱。星號會捕獲所有與已知模式不匹配的值。
$ cat test26.sh
#!/bin/bash
case $USER in
rich | barbara) #rich和barbara分別是pattern1和pattern2
echo "Welcome, $USER" #command1
echo "Please enjoy your visit";;
testing) #pattern3
echo "Special testing account";;#command2
jessica)#pattern4
echo "Do not forget to log off when you're done";;#command3
*) #default commands
echo "Sorry, you are not allowed here";;
esac
$ ./test26.sh
Welcome, rich
Please enjoy your visit
case命令提供了一個更清晰的方法來為變量每個可能的值指定不同的選項杀迹。