我制作了一个包含大约 10 个可选参数的脚本,我可以用它来提供:
-s sorts the list
-d gives all the directories of the map
-a also the hidden files of the map
例子:. MyScript -d Downloads
但现在我想要一个合适的方法来组合我所有的参数
所以我可以这样做:-sda or -s -d
他们是让这个工作的简单方法吗?如果有人对此有一点解释或教程,请发布!
谢谢阅读
我想getopts
这就是你要找的。
这里有一个简单的教程来帮助您入门。
一个例子(直接取自教程):
#!/bin/bash
while getopts ":a:" opt; do
case $opt in
a)
echo "-a was triggered, Parameter: $OPTARG" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
问候
您可以使用getopts
内部bash功能。试试这个例子:
while getopts abc: name; do
echo $name, OPTARG: $OPTARG, OPTIND: $OPTIND, OPTERR: $OPTERR
done
跑:./test -ab -c file
结果:
a, OPTARG: , OPTIND: 1, OPTERR: 1
b, OPTARG: , OPTIND: 2, OPTERR: 1
c, OPTARG: file, OPTIND: 4, OPTERR: 1
该变量name
将设置为已解析的参数。如果:
字符后面有一个,则需要一个参数,该参数将被放置到OPTARG
变量中。OPTIND
显示下一个要处理的参数。
如果OPTERR
设置了,那么如果发生错误, bash会显示错误消息。如果第一个 arg 是,:
则抑制错误消息。
跑:./test -d
结果:
./test: illegal option -- d
?, OPTARG: , OPTIND: 2, OPTERR: 1
或./test -c
(-c
需要一个额外的参数)
结果:
./test: option requires an argument -- c
?, OPTARG: , OPTIND: 2, OPTERR: 1
因此,您可以测试是否name
是?
一个错误的选择。