Linux学习之二十二(case语句及脚本选项)

来源:互联网 发布:嘻游网络加速器 编辑:程序博客网 时间:2024/06/16 21:55
脚本编程 case语句及脚本选项
编程分类:
    面向过程:
        控制结构
            顺序结构
            选择结构
            循环结构
选择结构:
    1、if:单分支、双分支、多分支
    单分支:if CONDITION; then
               statement
                ....
            fi
    双分支:if CONDITION; then
               statement
               ...
            else
               statement
               ...
            fi
    多分支:if CONDITION1; then
               statement
               ...
            elif CONDITION2; then
               statement
               ...
             else
                statement
                ...
            fi        
    2、case语句:选择结构
        case SWITCH in
        value1)
            statement
            ...
            ;;
        value2)
            statement
            ...
            ;;
        *)
            statement
            ...
            ;;
        esac
    例1:写一个脚本,输入一个字母,如果是a-z,显示是小写字母,如果是A-Z,显示是大写字母,如果是其他,显示是特殊字符。
    #!/bin/bash
    #
    case $1 in
    [0-9])
        echo "A digit.";;
    [a-z])
        echo "Lower.";;
    [A-Z])
        echo "Upper.";;
    *)
        echo "Special character.";;
    esac
    例2:只接受参数start、stop、restart、status其中之一
    #!/bin/bash
    #
    case $1 in
    'start')
            echo "start server...";;
    'stop')
            echo "stop server...";;
    'restart')
            echo "Rstarting server...";;
    'status')
            echo "Running...";;
    *)
            echo "`basename $0` {start|stop|restart|status}";;
    esac
    例3:写一个脚本,可以接受选项及参数,而后能获取每一个选项,及选项的参数;并能根据选项及参数做出特定的操作。比如:
    adminusers.sh  --add tom,jerry --del tom,blair -v|--verbose  -h|--help
    #!/bin/bash
    #
    DEBUG=0
    ADD=0
    DEL=0

    for I in ` seq 0 $#`; do
    if [ $# -gt 0 ]; then
    case $1 in
    -v|--verbose)
        DEBUG=1
        shift ;;
    -h|--help)
        echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
        exit 0
        ;;
    --add)
        ADD=1
        ADDUSERS=$2
        shift 2
       ;;
    --del)
        DEL=1
        ADDUSERS=$2
        shift 2
        ;;
    *)
        echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
        exit 7       
        ;;
    esac
    fi
    done

    if [ $ADD -eq 1 ]; then
        for USER in `echo $ADDUSERS | sed 's@,@ @g'`; do
            if id $USER &> /dev/null; then
                [ $DEBUG -eq 1 ] && echo "$USER exists."
            else
                useradd $USER
                [ $DEBUG -eq 1 ] && echo "Add user $USER finished."
            fi
        done
    fi

    if [ $DEL -eq 1 ]; then
        for USER in `echo $ADDUSERS | sed 's@,@ @g'`; do
            if id $USER &> /dev/null; then
                userdel -r $USER
                [ $DEBUG -eq 1 ] && echo "Delete $USER finished."
            else
                [ $DEBUG -eq 1 ] && echo "$USER not exist."
            fi
        done
    fi
    例4:写一个脚本showlogged.sh,其用法格式为:
        showlogged.sh -v -c -h|--help
        其中,-h选项只能单独使用,用于显示帮助信息:-c选项时,显示当前系统上登录的所有用户数;如果同时使用了-v选项(不允许单独使用),
        则既显示同时登录的用户数,又显示登录的用户的相关信息:如
        Logged users:4.    #"4"为当前登录的用户数量
        
        They are:
        root     pts/1        2017-05-07 10:39 (192.168.100.102)
        
        #!/bin/bash
        #
        declare -i SHOWNUM=0
        declare -i SHOWUSERS=0

        for I in `seq 1 $#`; do
            if [ $# -gt 0 ]; then
                case $1 in
                -h|--help)
                    echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose."
                    ;;
                -c|--count)
                    let SHOWNUM=1
                    shift ;;
                -v|--verbose)
                    let SHOWUSERS=1
                    shift ;;
                *)       
                    echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose."
                    exit 8 ;;
                esac
            fi
        done

        if [ $SHOWNUM -eq 1 ]; then
            echo "Logged users: `who | wc -l`."
            if [ $SHOWUSERS -eq 1 ]; then
                echo "They are:"
                who
            fi
        fi
0 0
原创粉丝点击