case $1 in
-f)
... 針對-f玄子昂的程序代碼
;;
-d | --directory) #允許長選項
... 針對-d選項的程序代碼
;;
*)
echo $1:unkonw option >$2
exit 1
#在esac之前的;;形式是一個好習慣,不過并非必要
esac
這里我們看到,要測試的值出現(xiàn)在 case 和 in 之間.將值以雙引號括起來并非必要,但也無妨.要測試的值,根據(jù) shell 模式的列別一次測試,返現(xiàn)匹配的時候,便執(zhí)行相對應的程序代碼,直至;;為止.可以使用多個模式,只要| 字符加以分割即可.這種情況稱為”or(或)”.模式里會包含任何的 shell 統(tǒng)配字符,且變量,命令與算數(shù)替換會在它用作模式匹配之前在此值上被終止.
可能會覺得每個模式列表之后的部隊稱的右圓括號有點奇怪,不過這也是 shell 于艷麗部隊稱定界符的位移實例.
最后的*模式視窗通用發(fā),但是非必須的,他作為一個默認的情況.這通常實在你要現(xiàn)實診斷信息并退出時使用.最后一個情況不再需要結尾的;;,不過加上他,會是比較好的形式
案例:提示輸入 1 到 4,與每一種模式進行匹配
bash 代碼:
echo 'input your a number 1 to4'
echo 'your number is : \n'
read aNum
case $aNum in
1)echo 'number 1'
;;
2)echo 'number 2'
;;
3)echo 'number 3'
;;
4)echo 'number 4'
;;
*)echo 'number default'
;;
esac
案例二:判斷輸入文件是文件還是目錄
option="${1}"
case ${option} in
-f) file="${2}"
echo "file name is $file"
;;
-d) dir="${2}"
echo "dir name is $dir"
;;
*)echo "basename ${0} :usage:[-f file ]| [-d directory]"
exit 1
;;
esac
案例三:
bash代碼;
#!/bin/bash
name='basename $0 .sh'
case $1 in
s|start) echo "start..."
;;
stop) echo "stop ..."
;;
reload)echo "reload..."
;;
*)echo "Usage: $name [start|stop|reload]"
exit 1
;;
esac
注意:1、 ) 相當于其他語言中的 default。
2、除了)模式,各個分支中;;是必須的,;;相當于其他語言中的 break
3、 | 分割多個模式,相當于 or
復習一下變量說明:
變量 |
作用 |
$$ |
shell本身的PID(ProcessID) |
$! |
sehll最后運行運行的后臺Process的PID |
$? |
最后運行的命令的結束代碼(返回值) |
$- |
使用set命令設定的Flag一覽 |
$* |
所有參數(shù)列表.如”$*”用圓括號括起來,以”$1?$2?...$n”的行為輸出所有參數(shù) |
$@ |
所有參數(shù)列表,如果”$@”用圓括號括起來,以”$1”?“$2”?“$n”的形式輸出所有參數(shù) |
$# |
添加到shell的參數(shù)個數(shù) |
$0 |
shell本身的文件名 |
$1~$n |
添加到sehll的各參數(shù)值.$1是第一個參數(shù),$2是第二個參數(shù),以此類推 |
案例:
printf "The complete list is %s\n" "$$"
結果:The complete list is 1567