shell程式設計 case語句

2021-05-27 07:20:52 字數 3449 閱讀 6621

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 根據 使用者的輸入 判斷是否是 數字 如果使用者 輸入數字輸 出...