我有一个Bash脚本,我需要传递一定数量的参数才能使其正常工作。
./upload.sh $ARG1 $ARG2 $ARG3
假设2个必填字段是ARG1和ARG2,以及
ARG1和3不为空。
我认为脚本会运行并认为它有2个必需参数, 有没有办法检测到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
提前致谢,
阿兰
答案 0 :(得分:3)
我总是使用一个小函数来检查所有参数:
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
}
这样,如果您遗漏任何内容,将显示正确的使用详细信息,脚本将退出。否则,您可以按任何顺序输入args。脚本启动后,只需调用
即可process_arguments "$@"
你应该全力以赴。
答案 1 :(得分:1)
有没有办法检测到ARG2缺失/空?
NO。你传递参数的方式,将被解释为参数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
在上面的示例中未定义。)
答案 2 :(得分:1)
你使用它们时的Args是位置的,所以你只提供1和3,但需要1和2,你只是意外地为arg 3提供了arg 2的值。
您可以要求您的可选参数以短划线开头 - 如果您发现$ 1或$ 2以短划线开头,则表示您缺少必需参数。你当然必须从$ 3中删除破折号。
处理args的更好方法是使用getopts。以下是一些可以帮助您入门的资源:
这将允许您以类似于标准命令行工具的方式处理args。如果你在C中编写命令行工具,你可能以前使用过c语言版的getops。
答案 3 :(得分:1)
我喜欢:
VARNAME=${1:?"missing arg 1 for VARNAME"}
答案 4 :(得分:0)
除非我认为脚本会运行并认为它有2个必需参数,有没有办法检测到ARG2缺失/空?
ARG2
,否则否
如果上述任何一种情况成立,您可以编写一段代码来确定ARG2
是否真的与CONTAINER
对应,或者最有可能是APP_NAME
如果没有,您将需要
./upload.sh --resource blah --container blahblah --appname blablahblah
,方便的getopts
。