为什么我的bash脚本认为不存在自变量?

时间:2019-05-22 09:30:00

标签: bash shell

我正在尝试编写一个简单的bash脚本,该脚本将按以下方式执行

1 (UPDATE_NOT_AVAILABLE)

我正在使用这种方法在Go项目中的构建时传递一些参数。

该脚本的一个非常简单的版本是:

$ ./export.sh -n <my-file-name> -a <my-api-key>

如果#!/bin/bash while getopts n:a option do case "${option}" in n) FILENAME=${OPTARG};; a) APIKEY=${OPTARG};; esac done if [ -z "$FILENAME" ] then FILENAME=downloader fi if [ -z "$APIKEY" ] then echo "[ERROR] Missing API key" exit 1 fi cd src && go build -o ../build/${FILENAME}.exe downloader -ldflags "-X api.APIServiceKey="${APIKEY} 不存在,我提供一个默认值,但是如果缺少FILENAME,我想存在并显示一条消息。

使用所有参数运行脚本会引发错误,好像缺少APIKEY

1 个答案:

答案 0 :(得分:0)

您在getopts呼叫中缺少冒号。由于您期望有-a的参数,因此在optstring中必须在其后加一个冒号:while getopts n:a: option

引用getopts手册页:

  

当选项需要选项参数时,getopts实用程序应   将其放在外壳变量OPTARG中。 [...]如果跟随字符   用表示,该选项应具有以下参数:   应该作为单独的参数提供。