Bash如何检测传递给脚本的缺少的强制参数
我有一个Bash脚本,需要传递一定数量的参数才能使其工作。Bash如何检测传递给脚本的缺少的强制参数,bash,Bash,我有一个Bash脚本,需要传递一定数量的参数才能使其工作。 /upload.sh$ARG1$ARG2$ARG3 假设这两个必填字段是ARG1和ARG2, ARG1和arg3不为空。 我认为脚本将运行并认为它有两个强制参数, 是否有方法检测ARG2缺失/为空? 我需要返回出口1,而不是出口0 这里有一点脚本 RESOURCE=$1 CONTAINER=$2 APP_NAME=$3 if [[ -z $RESOURCE || -z $CONTAINER ]]; then echo `dat
/upload.sh$ARG1$ARG2$ARG3
假设这两个必填字段是ARG1和ARG2,
ARG1和arg3不为空。
我认为脚本将运行并认为它有两个强制参数, 是否有方法检测ARG2缺失/为空? 我需要返回出口1,而不是出口0 这里有一点脚本
RESOURCE=$1
CONTAINER=$2
APP_NAME=$3
if [[ -z $RESOURCE || -z $CONTAINER ]];
then
echo `date`" - Missing mandatory arguments: resource and container. "
echo `date`" - Usage: ./upload.sh [resource] [container] [appname] . "
exit 1
fi
提前感谢,
阿兰
是否有方法检测ARG2缺失/为空
不,按照你传递参数的方式,这些将被解释为参数1和2
你可以说:
./upload.sh "$ARG1" "$ARG2" "$ARG3"
为了使bash正确解释参数,无论这些参数是否为空
例如:
$ cat file
[ -z $1 ] && echo "Arg 1 missing"
[ -z $2 ] && echo "Arg 2 missing"
[ -z $3 ] && echo "Arg 3 missing"
$ bash file "$HOME" "$FOOBAR" "$USER"
Arg 2 missing
(在上面的示例中,变量
FOOBAR
未定义。)Args在使用时是位置型的,因此您只提供了1和3,但1和2是必需的,您只是意外地为arg 3提供了一个值作为arg 2
您可以要求您的可选参数以破折号开头,如果您发现$1或$2以破折号开头,您知道您缺少必需的参数。当然,你必须从3美元中去掉破折号
处理args的更好方法是使用。以下是一些帮助您入门的资源:
ARG2
- 具有一些可识别的结构,例如URL、电子邮件或银行帐户,或
- 是一个对象的名称,该对象的存在可以像文件、文件中的条目等一样进行测试
ARG2
是否真正对应于容器
,或者很可能是应用程序名称
如果没有,您将需要
- 强制第三个论点
- 使用方便的
,放弃使用位置参数以支持命名参数,例如getopts
/upload.sh--resource blah--container blahblah--appname blahblah
process_arguments() {
while [ -n "$1" ]
do
case $1 in
-h|--help) echo "some usage details"; exit 1;;
-x) do_something; shift; break;;
-y) do_something_else; shift; break;;
*) echo "some usage details"; exit 1;;
esac
echo $1; shift
done
}
这样,如果您遗漏了任何内容,将显示正确的用法详细信息,脚本将退出。否则,您可以按任意顺序输入参数。脚本启动时,只需调用
process_arguments "$@"
你应该准备好了。我喜欢:
VARNAME=${1:?"missing arg 1 for VARNAME"}
阿兰,我下面的回答有用吗?