鍍金池/ 教程/ Linux/ shell 學習二十八天---case 語句
shell 學習四十五天---xargs
shell學習第三天
shell 學習十五天---join 連接字段
shell 學習第二天
shell 學習四十三天---臨時性文件的建立與使用
shell 學習第六天---小結
shell 學習三十三天---關于重定向
shell 學習二十九天---循環(huán)
shell 學習二十四天---提取開頭或結尾數(shù)行
shell 學習第十天---sed 查找與替換
shell 學習第十一天---sed 正則的精確控制
shell 學習三十天---break,continue,shift,getopts
shell 學習---小結
shell 學習三十一天---函數(shù)問題
shell 學習第四天---華麗的 printf 輸出
shell 學習三十五天---波浪號展開與通配符
shell 學習十九天---文本塊排序
shell 學習十二天---行與字符串
shell 學習二十一天---重新格式化段落
shell 學習十八天---文本排序
shell 學習十三天---sed 案例分析
shell 學習四十一天---列出文件 ls 和 od 命令
shell 學習十七天---awk 命令
shell 學習三十六天---命令替換
shell 學習十六天---join 練習
shell 學習三十二天---read 讀取一行
shell 學習二十二天---計算行數(shù),字數(shù)以及字符數(shù)
shell 學習小總結---本章小結
shell 學習第八天---擴展正則表達式(ERE)
shell 學習四十二天---使用 touch 更新文件時間
shell 學習二十八天---case 語句
shell 學習三十九天---內(nèi)建命令
shell 學習第一天
shell 學習三十四天---printf 詳解
shell 學習二十六天---變量與算數(shù)
shell 學習三十八天---執(zhí)行順序和 eval
shell 學習四十四天---尋找文件
shell 學習二十五天---神器的管道符
shell 學習十四天---使用 cut 選定字段
shell 學習第五天---基本的I/O重定向
shell 學習四十天---awk 的驚人表現(xiàn)
shell 學習二十天---sort 的其他內(nèi)容以及 uniq 命令
shell 學習二十三天---打印
shell 學習第九天---分組
shell 學習四十八天---文件校驗和匹配
shell 學習二十七天---退出狀態(tài)和 if 語句
shell 學習四十七天---文件比較 cmp,diff,patch
shell 學習第七天---基礎正則表達式(BRE)
shell 學習四十六天---文件系統(tǒng)的空間信息 df 和 du 命令
shell 學習三十七天---引用
shell 學習小結

shell 學習二十八天---case 語句

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最后運行運行的后臺ProcessPID

$?

最后運行的命令的結束代碼(返回值)

$-

使用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