zl程序教程

您现在的位置是:首页 >  其他

当前栏目

shell getopts

2023-09-11 14:16:16 时间

 

用getopts命令获取到脚本选项后,getopts会将获取到的选项所对应的参数(选项对应的参数,并不是选项本身,有的命令选项后面是需要跟一个参数的,例如tcpdump 的-w选项,后面需要指定一个文件来保存抓包数据)自动保存到OPTARG这个变量中。

getopts命令格式:getopts   OPTSTRING  VARNAME   

OPTSTRING:告诉getopts会有哪些选项和参数(用选项后面加“:”来表示选项后面需要加参数)

VARNAME:保存getopts获取到的选项

#!/bin/env sh

function Usage(){
        echo -e "\e[1;31;47mUsage: $0 [-a] [-b <arg>] [-c]\e[0m"
        return 0
}

while getopts :ab:c opt
do
        case "$opt" in
        a)
                echo "Found -$opt option!"
                ;;
        b)
                echo "Found -$opt option!,with parameter value $OPTARG!"
                ;;
        c)
                echo "Found -$opt option!"
                ;;
        :)     # 没有选项参数时,opt置为 : ,OPTARG变成选项
                echo "Option -$OPTARG need parameter!"
                Usage
                ;;
        ?)     # 没有该选项是,opt置为 ? ,OPTARG变成选项 
          echo
"Option -$OPTARG invalid" Usage ;; *) echo "Unknow option: -$OPTARG" ;; esac done echo $*

 

#!/bin/env sh

status=off
filename=''
output=''

function usage(){
    echo -e "\e[1;31;47mUsage: $0 [-h] [-v] [-f <filename>] [-o <filename>]\e[0m"
#    exit -1
}

while getopts ':hvf:o:' var
do
    case $var in
    h)
        echo $var
        usage
        exit -1
        ;;
    v)
        echo $var
        status=on
        echo $status
    #    exit -1
        ;;
    f)
        echo $var
        echo $OPTARG
        filename=$OPTARG
        if [ ! -f $filename ];then
            echo "the source file $filename not exists nor $filename is not regular file!"
        #    exit -1
        fi
        ;;
    o)
        echo $var
        echo $OPTARG
        output=$OPTARG
        if [ ! -d $output ];then
            echo "the output path $output not exists!"
        #    exit -1
        fi
        ;;
    :)
        echo $var
        echo "the option -$OPTARG require an arguement"
        usage
    #    exit 2
        ;;
    ?)
        echo $var
        echo "Invaild option: -$OPTAGR"
        usage
    #    exit 2
        ;;
    *)
        echo default
        usage
    #    exit 3
        ;;
    esac
done

echo after circulation