我想使用 .sh 文件制作一个 Pathogen 助手脚本。我知道如果你让它可执行,它可以作为命令运行,但我不知道该怎么做-o --options
或arguments
类似的事情。
基本上这就是我想要回答的,我真正需要知道的是如何做类似的事情:
pathogen install git://...
或类似的规定。任何帮助表示赞赏。:)
据我所知,bash 内置getopts不处理长 arg 解析机制。
getopt(1)是您正在寻找的工具。
不完全是一个程序,但你会明白的
PARSED_OPTIONS=$(getopt -n "$0" -o h123: --long "help,one,two,three:" -- "$@")
while true;
do
case "$1" in
-h|--help)
echo "usage $0 -h -1 -2 -3 or $0 --help --one --two --three"
shift;;
-1|--one)
echo "One"
shift;;
--)
shift
break;;
esac
done
看看这里给出的代码示例和解释。
传递参数是两者中最简单的(参见SO 上的“什么是特殊的美元符号 shell 变量? ”):
#!/bin/sh
echo "$#"; # total number of arguments
echo "$0"; # name of the shell script
echo "$1"; # first argument
假设文件名为“stuff”(无扩展名)并且运行结果./stuff hello world
:
3
stuff
hello
要传入单个字母开关(带有可选的关联参数),例如,./stuff -v -s hello
您需要使用getopts
. 请参阅SO 上的“你如何使用 getopts ”和这个很棒的教程。这是一个例子:
#!/bin/sh
verbose=1
string=
while getopts ":vs:" OPT; do
case "$OPT" in
v) verbose=0;;
s) string="$OPTARG";;
esac;
done;
if verbose; then
echo "verbose is on";
fi;
echo "$string";
getopts
加上while
需要进一步解释的行:
while
- 启动 while 循环,getopts
处理完所有内容后返回getopts :vs: OPT;
-getopts
具有 2 个参数的程序:vs:
和OPT
getopts
- 返回while
可以迭代的东西:vs:
- 第一个参数,它描述了getopts
在解析 shell 行时将寻找
什么开关:
- 第一个冒号getopts
退出调试模式,省略它以使getopts
详细v
- 找到开关-v
,这后面不会有参数,只是一个简单的开关s:
- 找到-s
后面有参数的选项OPT
- 将存储使用的字符(开关的名称),例如“v”或“s”OPTARG
while
- 在每次迭代期间将值加载到其中的变量。For v
,$OPTARG
不会有值,但 fors
会有。冒号:
告诉 getopts 在切换后查找参数。唯一的例外是,如果字符序列以:
then 开头,它会切换getopts
到/切换到调试/详细模式。例如:
getopts :q:r:stu:v
将使 getopts 退出调试模式,并告诉它 switch q
、r
和u
will 需要 args,而s
、t
和u
不会。这将适用于以下情况:stuff -q hello -r world -s -t -u 123 -v
getopts tuv
只会告诉 getopts 搜索 switch t
,u
并且v
没有参数,例如stuff -t -u -v
,并且是详细的