case 語句
case $1 in
-f)
... 針對 -f 玄子昂的程序代碼
;;
-d | --directory) #允許長選項
... 針對 -d 選項的程序代碼
;;
*)
echo $1:unkonw option >$2
exit 1
、#在 esac 之前的;; 形式是一個好習(xí)慣, 不過并非必要
esac
這里我們看到,要測試的值出現(xiàn)在 case 和 in 之間。將值以雙引號括起來并非必要,但也無妨。要測試的值,根據(jù) shell 模式的列別一次測試,返現(xiàn)匹配的時候,便執(zhí)行相對應(yīng)的程序代碼,直至;;
為止??梢允褂枚鄠€模式,只要|字符加以分割即可。這種情況稱為 “or(或)”。模式里會包含任何的 shell 統(tǒng)配字符,且變量,命令與算數(shù)替換會在它用作模式匹配之前在此值上被終止。
可能會覺得每個模式列表之后的部隊稱的右圓括號有點奇怪,不過這也是 shell 于艷麗部隊稱定界符的位移實例。
最后的 * 模式視窗通用發(fā),但是非必須的,他作為一個默認(rèn)的情況。這通常實在你要現(xiàn)實診斷信息并退出時使用。最后一個情況不再需要結(jié)尾的
;;
,不過加上他,會是比較好的形式
案例一:提示輸入 1 到 4,與每一種模式進(jìn)行匹配
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
注意:
*)
相當(dāng)于其他語言中的 default。*)
模式,各個分支中;;是必須的,;;相當(dāng)于其他語言中的 break|
分割多個模式,相當(dāng)于 or復(fù)習(xí)一下變量說明:
變量
作用
$$
shell 本身的 PID(ProcessID)
$!
sehll 最后運行運行的后臺 Process 的 PID
$?
最后運行的命令的結(jié)束代碼 (返回值)
$-
使用 set 命令設(shè)定的 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" "$$"
結(jié)果:The complete list is 1567