在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来获取可选的输入参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章