未检测到Bash参数

时间:2019-03-22 17:22:10

标签: bash shell sh

当我尝试执行这样的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函数。我不清楚这是否与问题有关。

2 个答案:

答案 0 :(得分:3)

您必须告诉getopts -t-n接受论证。

while getopts t:n: option; do

在没有冒号的情况下,-t被识别为选项,但未设置OPTARG。下一个参数(development既不是-t也不是-n,因此终止循环。

答案 1 :(得分:0)

:添加到带有参数的选项中。

getopts t:n: option