鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)第二十八天----case 語句
shell 學(xué)習(xí)四十一天----列出文件 ls 和 od 命令
shell 學(xué)習(xí)小結(jié)
shell 學(xué)習(xí)第二十八天----case 語句
shell 學(xué)習(xí)四十四天----尋找文件
shell 學(xué)習(xí)三十五天----波浪號展開與通配符
shell 學(xué)習(xí)三十八天----執(zhí)行順序和 eval
shell 學(xué)習(xí)四十八天----文件校驗和匹配
shell 學(xué)習(xí)四十天----awk 的驚人表現(xiàn)
shell 學(xué)習(xí)第十一天----sed 正則的精確控制
shell 學(xué)習(xí)第十七天----awk 命令
shell 學(xué)習(xí)三十九天----內(nèi)建命令
shell 學(xué)習(xí)四十五天----xargs
shell 學(xué)習(xí)三十七天----引用
shell 學(xué)習(xí)第十六天----join 練習(xí)
shell 學(xué)習(xí)第二十四天----提取開頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第九天----分組
shell 學(xué)習(xí)第五天----基本的 I/O 重定向
shell 學(xué)習(xí)第十五天----使用 cut 選定字段
shell 學(xué)習(xí)四十六天----文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)第八天----擴(kuò)展正則表達(dá)式 (ERE)
shell 學(xué)習(xí)第十九天----文本塊排序
shell 學(xué)習(xí)第二十一天----重新格式化段落
shell 學(xué)習(xí)三十六天----命令替換
shell 學(xué)習(xí)第二十天----sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)四十二天----使用 touch 更新文件時間
shell 學(xué)習(xí)五十一天----top 命令查看進(jìn)程列表
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)五十四天----進(jìn)程系統(tǒng)調(diào)用的追蹤 strace
shell 學(xué)習(xí)五十天----查看進(jìn)程 ps 命令
shell 學(xué)習(xí)第二十七天----退出狀態(tài)和 if 語句
shell 學(xué)習(xí)第二十三天----打印
shell 學(xué)習(xí)三十三天----關(guān)于重定向
shell 學(xué)習(xí)四十九天----進(jìn)程建立
shell 學(xué)習(xí)第三十天----break,continue,shift,getopts
shell 學(xué)習(xí)五十五天----進(jìn)程記賬
shell 學(xué)習(xí)總結(jié)一
shell 學(xué)習(xí)第二十六天----變量與算數(shù)
shell 學(xué)習(xí)第二十二天----計算行數(shù), 字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)五十八天----/proc 文件系統(tǒng)
shell 學(xué)習(xí)第二十五天----神器的管道符
shell 學(xué)習(xí)第三十二天----read 讀取一行
sheel 學(xué)習(xí)第三天
shell 學(xué)習(xí)----小結(jié)
shell 學(xué)習(xí)第十八天----文本排序
shell 學(xué)習(xí)第三十一天----函數(shù)問題
shell 學(xué)習(xí)第十天----sed 查找與替換
shell 學(xué)習(xí)四十三天----臨時性文件的建立與使用
shell 學(xué)習(xí)四十七天----文件比較 cmp,diff,patch
shell 學(xué)習(xí)三十四天----printf 詳解
shell 學(xué)習(xí)五十七天 ----linux 任務(wù)管理,針對上一講的總結(jié)和擴(kuò)展
shell 學(xué)習(xí)第六天----小結(jié)
shell 學(xué)習(xí)第十三天----sed 案例分析
shell 學(xué)習(xí)第七天----基礎(chǔ)正則表達(dá)式 (BRE)
shell 學(xué)習(xí)第十二天----行與字符串
shell 學(xué)習(xí)小結(jié)四
shell 學(xué)習(xí)第二十九天----循環(huán)
shell 學(xué)習(xí)五十二天----刪除進(jìn)程 kill 命令
shell 學(xué)習(xí)五十六天----延遲進(jìn)程調(diào)度
shell 學(xué)習(xí)第四天----華麗的 printf 輸出
shell 學(xué)習(xí)第十五天----join 連接字段
shell 學(xué)習(xí)完結(jié)篇----希望你能看到
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)五十三天----捕獲信號 trap

shell 學(xué)習(xí)第二十八天----case 語句

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

注意

  1. *) 相當(dāng)于其他語言中的 default。
  2. 除了 *) 模式,各個分支中;;是必須的,;;相當(dāng)于其他語言中的 break
  3. | 分割多個模式,相當(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