我想使用.sh文件制作一个Pathogen助手脚本。我知道如果你让它可执行,它可以作为一个命令运行,但我不知道如何做-o --options
或arguments
或类似的事情。
基本上这就是我想回答的问题,我真正需要知道的是如何做以下事情:
pathogen install git://...
或者那些东西。任何帮助表示赞赏。 :)
答案 0 :(得分:1)
据我所知,bash builtin 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
查看给出here的代码示例和解释。
答案 1 :(得分:1)
传递参数是两者中最容易的(参见SO上的“What are special dollar sign shell variables?”):
#!/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和How do you use getopts上的“this great tutorial”。这是一个例子:
#!/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;
- 包含2个参数getopts
和:vs:
的计划OPT
getopts
- 返回while
可以迭代的内容:vs:
- 第一个参数,它描述了getopts
在解析shell行时查找的内容
:
- 第一个冒号将getopts
退出调试模式,省略此项以使getopts
详细v
- 找到开关-v
,这之后就没有参数了,只是一个简单的开关s:
- 找到带有参数的选项-s
OPT
- 将存储使用的字符(开关的名称),例如“v”或“s”OPTARG
- 在每个while
迭代期间加载值的变量。对于v
,$OPTARG
不会有值,但对于s
,它会有。冒号:
告诉getopts在切换后查找参数。唯一的例外是如果字符序列以:
开头,那么它会在调试/详细模式下切换getopts
。例如:
getopts :q:r:stu:v
会将getopts从调试模式中移除,并告诉它q
,r
和u
切换器需要args,而s
, t
和u
不会。这适用于以下内容:stuff -q hello -r world -s -t -u 123 -v
getopts tuv
只会告诉getopts搜索没有参数的开关t
,u
和v
,例如stuff -t -u -v
,并且是详细的