• getopt使用例子


    绝大多数脚本使用getopts应该就可以满足需求了,如果需要支持长选项以及可选参数,那么就需要使用getopt了.

    getopt和getopts类似,也是通过冒号来区分选项是否接受参数值,其定义如下:

    后面没有冒号,表示选项不接参数
    后面有一个冒号,表示选项必须接参数
    后面有两个冒号,表示选项参数可选
    我们来看一下这个命令

    example.sh -a -b value2 --argv3 value3
    我们看到这个命令有两个短选项和一个长选项,分别是-a,-b和--argv3,其中a不接收参数,b和argv3接收参数,我们看一下如何在脚本里面进行定义

    ARGS=`getopt -o ab: -l "argv3:,help"  -- "$@"`
    eval set -- "${ARGS}"
    
    

    因为getopt是一个独立的程序,所以我们使用``来进行getopt的执行和结果获取,并通过eval set将规范化后的命令行参数分配至位置参数(1,1,2,...)

    其中-o或--options选项后面接可接受的短选项;-l或--long选项后面接可接受的长选项,用逗号分开

    一个完整的示例脚本如下:

    #!/bin/bash
    
    ARGS=`getopt -o ab: -l "argv3:,help" -- "$@"`
    eval set -- "${ARGS}"
    
    while true;
    do
        case "$1" in
            -a) 
                echo "i am a"
                shift
                ;;
            -b) 
                echo "i am b, my value is $2" 
                shift 2
                ;;
            --argv3)
                echo "i am argv3, my value is $2"
                shift 2
                ;;
            --help)
                echo "i am help info"
                exit 0
                ;;
            --)
                shift
                break
                ;;
            *)
                echo "Internal error!"
                exit 1
                ;;
        esac
    done
    
    
    if [[ $# -eq 0  ]];then
        USAGE
    fi
    
    ARGS=`getopt -o d: -l "prepare,cleanup,ip:,sleep:,help" -- "$@"`
    eval set -- "${ARGS}"
    
    while true;
    do
        case "$1" in
            --prepare)
    			echo "prepare"
                ENV_PREPARE
    			exit 0
                ;;
            --cleanup)
    			echo cleanup
    			ENV_CLEAN
    			exit 0
                ;;
            --ip)
    			SERVER_IP=$2
                shift 2
    			;;
            --sleep)
    			SLEEP_TIME=$2
                shift 2
    			;;
            --help)
    			USAGE
                exit 0
                ;;
            -d)
    			DO_CASE $2
    			if [[ $? -eq 0 && ! -z $SLEEP_TIME ]];then
    				#只有server需要获取结果
    			   GET_RESULT
    			fi
                shift 2
                ;;
            --)
                shift
                break
                ;;
            *)
                echo "Internal error!"
                exit 1
                ;;
        esac
    done
    
  • 相关阅读:
    Oracle -- Create Tablespace
    EntityFramework-DBFirst-重新生成后写的验证消失(解决办法)
    UILocalNotification本地通知
    属性观察者willSet与didSet
    常用后台frame框架
    Windows常用CMD命令
    常用的格式符与转义字符
    Windows操作系统常用快捷键
    Mac操作系统常用快捷键
    srp render queue 失效
  • 原文地址:https://www.cnblogs.com/muahao/p/6252392.html
Copyright © 2020-2023  润新知