shell的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" *) echo "not correct input";; esac |
# sh ./test.sh input : 2 the input data is 2 Feburary # sh ./test.sh input : ter the input data is ter not correct input |
test: line 166: syntax error near unexpected
token `)'
test: line 166: `"system hostname config")'
匹配符[]是专门针对单字符的值,如果用[no],就是n和o之一
case $yn in |
[macg@mac-home ~]$ sh test.sh enter y/n : no only accept Y,y,N,n,YES,yes,NO,no |
case $yn in |
[macg@mac-home ~]$ sh test.sh enter y/n : no |
注意::
如果有多个单词可以用"|"隔开,如
case $yn in
start | begin ) return 0;;
end | over ) return 1;;
* ) return 3;;
if,
[macg@machome ~]$ vi test.sh |
[macg@machome ~]$ sh test.sh 22.txt |
这里需要注意的是:$(ls -l $1)
匹配是用两个**,因为整个var的内容是一行,要在两个之间匹配
例2.匹配file命令输出的一堆文字,以获知文件类型
用’ ’ 取输出,然后用CASE+*对输出做修饰处理.
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 |
($@ 字符串数组:以"参数1" "参数2" ... 的字符串数组形式保存所有参数
对于单个参数的情况,$@就是一个字符串)
restart)
status)