我制作了一个大约有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
他们是一个让这项工作变得简单的方法吗? 如果有人有关于此的详细解释或教程,请发布!
Thnx for reading
答案 0 :(得分:2)
您可以使用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
是否为?
,那么这是一个糟糕的选择。
答案 1 :(得分:2)
我认为getopts
正是您所寻找的
Here一个简单的教程,可以帮助您入门。
一个例子(直接来自教程):
#!/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
此致