我想让我的脚本接受变量参数。我如何单独检查它们?
例如
./myscript arg1 arg2 arg3 arg4
or
./myscript arg4 arg2 arg3
参数可以是任何数字,也可以是任何顺序。我想检查是否存在arg4字符串,而不管参数号是什么。
我该怎么做?
谢谢,
答案 0 :(得分:4)
最安全的方法 - 处理参数中空白的所有可能性的方式,等等 - 是编写一个显式循环:
arg4_is_an_argument=''
for arg in "$@" ; do
if [[ "$arg" = 'arg4' ]] ; then
arg4_is_an_argument=1
fi
done
if [[ "$arg4_is_an_argument" ]] ; then
: the argument was present
else
: the argument was not present
fi
如果您确定您的论点不会包含空格 - 或者至少,如果您不是特别担心这种情况 - 那么您可以将其缩短为:
if [[ " $* " == *' arg4 '* ]] ; fi
: the argument was almost certainly present
else
: the argument was not present
fi
答案 1 :(得分:1)
这对命令行“参数”的典型解释起到了快速和松散的作用,但我使用以下内容启动了大部分bash脚本,作为添加--help
支持的简单方法:
if [[ "$@" =~ --help ]]; then
echo 'So, lemme tell you how to work this here script...'
exit
fi
主要缺点是,这也会由request--help.log
,--no--help
等参数触发(不只是--help
,这可能是您的解决方案的要求。)< / p>
要在您的案例中应用此方法,您可以编写如下内容:
[[ "$@" =~ arg4 ]] && echo "Ahoy, arg4 sighted!"
Bonus!如果您的脚本至少需要一个命令行参数,那么在没有提供参数的情况下,您可以类似地触发帮助消息:
if [[ "${@---help}" =~ --help ]]; then
echo 'Ok first yer gonna need to find a file...'
exit 1
fi
如果绝对没有给出参数,则使用空变量替换语法${VAR-default}
来产生--help
参数。
答案 2 :(得分:0)
也许这会有所帮助。
#!/bin/bash
# this is myscript.sh
[ `echo $* | grep arg4` ] && echo true || echo false