返回首页 shell 脚本编程

shell 学习二十八天---case 语句

case $1 in  
-f)  
... 针对-f玄子昂的程序代码  
;;  
-d | --directory) #允许长选项  
... 针对-d选项的程序代码  
;;  
*)  
echo $1:unkonw option >$2  
exit 1  
#在esac之前的;;形式是一个好习惯,不过并非必要  
esac

这里我们看到,要测试的值出现在 case 和 in 之间.将值以双引号括起来并非必要,但也无妨.要测试的值,根据 shell 模式的列别一次测试,返现匹配的时候,便执行相对应的程序代码,直至;;为止.可以使用多个模式,只要| 字符加以分割即可.这种情况称为”or(或)”.模式里会包含任何的 shell 统配字符,且变量,命令与算数替换会在它用作模式匹配之前在此值上被终止.
可能会觉得每个模式列表之后的部队称的右圆括号有点奇怪,不过这也是 shell 于艳丽部队称定界符的位移实例.

最后的*模式视窗通用发,但是非必须的,他作为一个默认的情况.这通常实在你要现实诊断信息并退出时使用.最后一个情况不再需要结尾的;;,不过加上他,会是比较好的形式
案例:提示输入 1 到 4,与每一种模式进行匹配
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、 ) 相当于其他语言中的 default。
2、除了
)模式,各个分支中;;是必须的,;;相当于其他语言中的 break
3、 | 分割多个模式,相当于 or

复习一下变量说明:

变量

作用

$$

shell本身的PID(ProcessID)

$!

sehll最后运行运行的后台ProcessPID

$?

最后运行的命令的结束代码(返回值)

$-

使用set命令设定的Flag一览

$*

所有参数列表.”$*”用圆括号括起来,”$1 $2 ...$n”的行为输出所有参数

$@

所有参数列表,如果”$@”用圆括号括起来,”$1” “$2” “$n”的形式输出所有参数

$#

添加到shell的参数个数

$0

shell本身的文件名

$1~$n

添加到sehll的各参数值.$1是第一个参数,$2是第二个参数,以此类推

案例:
printf "The complete list is %s\n" "$$"
结果:The complete list is 1567

上一篇: 退出状态和 if 语... 下一篇: 循环