在bash中使用getopts来获取可选的输入参数[重复]

Posted

技术标签:

【中文标题】在bash中使用getopts来获取可选的输入参数[重复]【英文标题】:Using getopts in bash to get optional input argument [duplicate] 【发布时间】:2014-07-19 14:30:51 【问题描述】:

我正在使用 getopts 来处理输入参数。我在读取可选参数值时遇到问题。 当我使用参数 test.sh -t test -r server -p password -v 1$OPTARG 调用脚本时,不会返回可选参数 -v 的值。

谁能告诉我如何处理可选参数值?

#!/bin/bash

usage() 

cat << EOF
usage: $0 options

OPTIONS:
   -h      Show this message
   -t      Test type
   -r      Server address
   -p      Server root password
   -v      Verbose
EOF


TEST=
SERVER=
PASSWD=
VERBOSE=

echo "======111======"
while getopts "ht:r:p:v" OPTION
do
     case $OPTION in
         h)
             usage
             echo "===Option h selected=="
             exit 1
             ;;
         t)
             TEST=$OPTARG
             echo "====option t selected===$TEST"
             ;;
         r)
             SERVER=$OPTARG
             echo "=====option r selected==="
             ;;
         p)
             PASSWD=$OPTARG
             echo "====option p selected==="
             ;;
         v)
             VERBOSE=$OPTARG
             echo "======option v selected===$VERBOSE"
             ;;
         ?)
             echo "====unknown option selected===="
             usage
             exit
             ;;
     esac
done

echo "========222===="

【问题讨论】:

我相信您在getopts 调用中的v 之后缺少一个冒号:。应该是while getopts "ht:r:p:v:" 或者你可以写类似((VERBOSE++))的东西,完全避免争论 【参考方案1】:

    做case语句中的事情。

    case $OPTION in
      v)
        VERBOSE=$OPTARG
        do_the_thing $OPTARG
        ;;
    esac
    

    在case语句之后做。

    if [ ! -z "$VERBOSE" ]; then
      do_the_thing "$VERBOSE"
    else
      do_not_do_the_thing
    fi
    

【讨论】:

以上是关于在bash中使用getopts来获取可选的输入参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

shell 脚本参数解析之 getopt getopts

使用 getopts 读取作为最终位置放置的一个可选参数

在 Perl 中使用 Getopt 时如何对参数进行分组?

使用 getopts (bash) 的多个选项参数

Getopt可选参数?

在 Bash 中使用 getopts 检索单个选项的多个参数