• 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"
    echo "sdf";; 但最后一条命令一定是双分号结束

    *) echo "not correct input";; *)是其他值、default的意思

    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



    case 语句如果某个选项没有任何语句,也要加;; 否则会出下边错误
    test: line 166: syntax error near unexpected token `)'
    test: line 166: `"system hostname config")'

    匹配符[]是专门针对单字符的值,如果用[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

    注意::
    如果有多个单词可以用"|"隔开,如

    case $yn in

       start | begin ) return 0;;

       end | over ) return 1;;

       * ) return 3;;

    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

    这里需要注意的是$(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

     

    最典型的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 {start|stop|restart|status}"
    exit 1
    esac

  • 相关阅读:
    hdu 1754 I Hate It
    hdu 2546 饭卡
    hdu 4506 小明系列故事——师兄帮帮忙
    hdu 3665 Seaside
    hdu 3790 最短路径问题
    hdu 1869 六度分离
    最长递增字串的三种做法
    问题集???
    IOS开发学习 碎片S
    超级台阶 (NYOJ—76)
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205675.html
Copyright © 2020-2023  润新知