我有一个简单的bash脚本
if [ $# -eq 0 ]
then du
else
while getopts :d:h:s:r:f:a: option; do
case $option in
d) echo 'd';;
h) echo 'h';;
s) echo 's';;
r) echo 'r';;
f) echo 'f';;
a) echo 'a';;
\?) echo 'option invalide,-h pour obtenir I aide'
esac
done
fi
例如,当我用./script.sh -d -a
调用它时,我希望返回“d a”。
问题是我只能得到“d”或“a”如果我调用它在其他顺序。
我怎样才能让脚本执行所有当前选项指令?
2条答案
按热度按时间vltsax251#
您对
getopt
的调用通过在每个名称后面加上一个:
来声明每个带参数的选项。因此,script.sh -d -a
可以识别带参数-a
的-d
选项,但您忽略了该参数。script.sh -a -d
也是如此:您可以识别-a
,但忽略其-d
选项。如果省略了
:
s,则选项只是不带参数的标志,您将依次看到每个选项:当您 do 使用
:
时,随选项提供的参数在OPTARG
参数中可用。请尝试使用以下脚本:1szpjjfi2#
您可以向bash脚本传递多个参数。通常,向任何bash脚本传递多个参数的语法如下:
script.sh arg 1 arg 2 arg 3...第二个参数将由$2变量引用,第三个参数将由$3引用,...依此类推。
变量$0包含bash脚本的名称,以防您感到奇怪!