case語句用於條件判斷,判斷乙個變數的不同取值
case 變數值 in
匹配模式1)
命令序列1
;; 匹配模式2)
命令序列2
;;........
........
*) #表示不是以上模式則執行
命令序列
;;esac
case行必須以「in」結尾
匹配模式必須以「)」結尾
「;;」 雙分號表示命令序列結束
「*)」表示預設模式,「 * 」於萬用字元含義相同
首先使用「變數值」與匹配模式1進行比較,如果值相同則執行該模式命令序列,直至「;;」號後跳轉esac,結束分支。如果「變數值」與匹配模式1不同,則與匹配模式2進行匹配取值,如果值相同則執行該模式命令序列,直至「;;」號後跳轉esac,結束分支。如果「變數值」與匹配模式2不同,則繼續匹配下個匹配模式,以此類推。如果找到不到匹配相同的值,則執行「*)」模式後的命令序列,直至esac結束分支。
read命令從鍵盤讀取變數的值,該命令可以一次讀取多個變數的值,變數和輸入的值都需要使用空格隔開。
read 命令詳解:
指令碼1:
指令碼內容:
[root@localhost 1]# vim gf.sh
#!/bin/bash
read -p "你今天吃了什麼飯?
:" gf
case $gf in
"饅頭")
echo "今天吃了$gf"
exit 0 #exit0 為退出的返回狀態碼
;;"公尺飯")
echo "今天吃了$gf"
exit 11
;;"包子")
echo "今天吃了$gf"
exit 22
;;"麵條")
echo "今天吃了$gf"
exit 33
;;*) echo "識別不到此食物"
exit 87
;;esac
[root@localhost 1]# chmod +x gf.sh
[root@localhost 1]# ./gf.sh
你今天吃了什麼?
:饅頭今天吃了饅頭
[root@localhost 1]# ./gf.sh
你今天吃了什麼?
:111
識別不到此食物
指令碼解釋:
read命令輸出的值為$gf變數,隨後case $gf in **行檢測read輸出值是否為「饅頭」,如果為饅頭則執行命令列,輸出今天吃了饅頭,如果不為饅頭則繼續檢測匹配,匹配完所有匹配模式分支沒有相同的,則執行預設「*)」輸出識別不到次食物。
指令碼2:
指令碼內容:
[root@localhost 1]# vim sz.sh
#!/bin/bash
read -p "輸入乙個數字或字母:" sz
case $sz in
[a-z])
echo "你輸入的是小寫字母"
;;[a-z])
echo "你輸入的大寫字母"
;;[0-99999])
echo "你輸入的是數字"
;;*) echo "你輸入的是其他字元"
;;esac
[root@localhost 1]# chmod +x sz.sh
[root@localhost 1]# ./sz.sh
輸入乙個數字或字母:9
你輸入的是數字
[root@localhost 1]# ./sz.sh
輸入乙個數字或字母:z
你輸入的是小寫字母
[root@localhost 1]# ./sz.sh
輸入乙個數字或字母:z
你輸入的大寫字母
指令碼解釋
read命令輸出的值為$sz變數,隨後case $sz in **行檢測read輸出值是否為「a-z」,如果為小寫字母「a-z」則執行命令列,輸出你輸入的是小寫字母,如果不為「a-z」則繼續檢測匹配,匹配完所有匹配模式分支沒有相同的,則執行預設「*)」輸出你輸入的是其他字元。
Linux Shell指令碼基礎
shell指令碼在處理自動迴圈或大的任務方面可節省大量時間,且功能強大。任何指令碼都可能有注釋,加注釋需要此行的第乙個字元為 直譯器對此行不予解釋。指令碼不是複雜的程式,它是按行解釋的。指令碼第一行總是以 bin sh開始,這段指令碼通知shell使用系統上的 bourne shell直譯器。指令碼...
linux shell指令碼犯錯
指令碼裡犯了錯 oracle it shell value 1 oracle it shell value 1 bash value command not found oracle it shell value 3 bash value command not found oracle it sh...
Linux shell 指令碼例項
1.寫乙個指令碼,利用迴圈計算10的階乘 2.寫乙個指令碼,執行後,列印一行提示 please input a number 要求使用者輸入數值,然後列印出該數值,然後再次要求使用者輸入數值。直到使用者輸入 end 停止 執行指令碼方法 nuhup sh route.sh 注意前面要用上nohup,...