当我尝试执行这样的bash脚本时:
bin/provision-pulsar-commands -t development -n provisioning
输出打印:
租户=
NAMESPACE =
这是我的脚本(provision-pulsar-commands):
#!/bin/bash
function display_usage {
echo "You may override the namespace and tenant for all components for testing, if desired."
echo "usage: bin/provision-pulsar-commands [-t tenant] [-n namespace]"
echo " -t Override tenant (e.g. development) for all components"
echo " -n Override namespace (e.g. provisioning) for all components"
echo " -h display help"
exit 1
}
# check whether user had supplied -h or --help . If yes display usage
if [[ ( $# == "--help") || $# == "-h" ]]
then
display_usage
exit 0
fi
while getopts tn option
do
case "${option}"
in
t) TENANT=${OPTARG};;
n) NAMESPACE=${OPTARG};;
esac
done
echo "TENANT = $TENANT"
echo "NAMESPACE = $NAMESPACE"
为什么我的参数值没有被提取? 我将代码基于以下示例:
说明:我的参数值是可选的。另外,当我传递-h或--help时,不会调用我的display_usage函数。我不清楚这是否与问题有关。
答案 0 :(得分:3)
您必须告诉getopts
-t
和-n
接受论证。
while getopts t:n: option; do
在没有冒号的情况下,-t
被识别为选项,但未设置OPTARG
。下一个参数(development
既不是-t
也不是-n
,因此终止循环。
答案 1 :(得分:0)
将:
添加到带有参数的选项中。
getopts t:n: option