Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78947
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 434
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-23 09:31
个人简介

天行健,君子以自强不息;地势坤,君子以厚德载物

文章分类
文章存档

2018年(11)

2017年(30)

我的朋友

分类: LINUX

2017-05-08 23:36:52

脚本编程 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
阅读(963) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~