case語句格式
# vi test.sh
:echo "input : "
read num
echo "the input data is $num"
case $num in
1) echo "january";;
雙分號結束
2) echo "feburary";;
5) echo "may"
每個case可以有多條命令
echo "sdfd"
echo "sdf";;
但最後一條命令一定是雙分號結束
*) echo "not correct input";; *)是其他值、default的意思
esac
# sh ./test.sh
input :
2the input data is 2
feburary
# sh ./test.sh
input :
terthe input data is ter
not correct input
case 語句如果某個選項沒有任何語句,也要加;; 否則會出下邊錯誤
test: line 166: syntax error near
unexpected token `)'
test: line 166: `"system hostname config")'
為什麼輸入no,仍不匹配到[no]
原來是專門針對
單字元的值,如果用[no],就是n和o之一
case $yn in
[no]) return 1;;
* ) echo "only accept y,y,n,n,yes,yes,no,no" >&2;;
[macg@mac-home ~]$ sh test.sh
enter y/n :
no only accept y,y,n,n,yes,yes,no,no
改正case $yn in
no) return 1;;
no) return 1;;
* ) echo "only accept y,y,n,n,yes,yes,no,no" >&2;;
esac
[macg@mac-home ~]$ sh test.sh
enter y/n :
no
乙個getyn()函式的例子
getyn( )
ifgetyn
呼叫函式
以函式作為if條件,必須用if command法
then
注意0為真
echo " your answer is yes"
else
echo "your anser is no"
fi if, case,匹配字串最常見,但如何匹配一段很長的輸出,一堆文字?最好方法,用「*」,如:*"command not found"*
[macg@machome ~]$ vi test.sh
var=$(ls -l $1)
$()取命令輸出,$1是命令列引數
echo "output is $var"
case $var in
"-rw-rw-r--"*) echo "this is not a execute file";;
"-rwxrwxr-x"*) echo "this is a execute file";
注意*在雙引號外邊
esac
[macg@machome ~]$ sh test.sh 22.txt
output is -rw-rw-r-- 1 macg macg 15 jun 9 19:00 22.txt
this is not a execute file
[macg@machome ~]$ chmod +x 22.txt
[macg@machome ~]$ sh test.sh 22.txt
output is -rwxrwxr-x 1 macg macg 15 jun 9 19:00 22.txt
this is a execute file
例2.匹配file命令輸出的一堆文字,以獲知檔案型別
用』 』 取輸出,然後用case+*對輸出做修飾處理.
[macg@machome ~]$ vi test.sh
var=`file $1`
` `和$( )作用相同,是取命令輸出
echo "output is $var"
case $var in
"$1: ascii text"*) echo "this is a text file";;
"$1: directory"*) echo "this is a directory";;
注意*在雙引號外邊
esac
[macg@machome ~]$ sh test.sh 22.txt
output is 22.txt: ascii text
this is a text file
[macg@machome ~]$ sh test.sh test-dir
output is test-dir: directory
this is a directory
最典型的shell case命令匹配命令列,用於sys v啟動指令碼的start|stop|restart|status處理
case
"$@"
in ($@ 字串陣列:以"引數1" "引數2" ... 的字串陣列形式儲存所有引數
對於單個引數的情況,$@就是乙個字串)
start)
echo
-n "starting
firewall..."
。。。
echo
"ok!"
exit
0 ;;
stop)
echo
-n "stopping
firewall..."
。。。
exit
0 ;;
restart)
$0 stop
$0即執行原始程式
$0 start
;; status)
clear
echo
">------------------------------------------"
iptables
-l echo
">------------------------------------------"
iptables
-t nat
-l postrouting
exit
0 *)
echo
"usage:
$0 " exit
1 esac
shell程式設計 case語句
case語句格式 vi test.sh echo input read num echo the input data is num case num in 1 echo january 雙分號結束 2 echo feburary 5 echo may 每個case可以有多條命令 echo sdfd...
Shell程式設計 case語句和迴圈語句
case語句主要適用於 某個變數存在多種取值,需要對其中的每一種取值分別執行不同的命令序列。相比if語句需要判斷多個不同的條件,case語句只是判斷乙個變數的不同取值。語法結構 case 變數名 in 模式1 命令序列1 模式2 命令序列2 預設命令序列 使用 case 分支語句時,幾個要注意的特點...
shell程式設計 十一 case條件語句
一 case條件語句 1 case語句相當於 多分支 的 if elif else 條件語句 2 用於實現 系統服務啟動指令碼 的場景 語法 case 字串變數 in 值1 指令1.值2 指令2.指令3.esac jira服務 需求1 根據 使用者的輸入 判斷是否是 數字 如果使用者 輸入數字輸 出...