从命令行调用时,我一直在使用多个使用以下格式的程序:
foo -1 parameter1 -2 parameter2 -3 parameter 3
并且参数的顺序无关紧要,只要它们后跟正确的参数(我假设破折号后跟某些东西也是参数)。所以这与上面的相同:
foo -2 parameter2 -1 parameter1 -3 parameter3
编写bash脚本的最有效方法是什么,该脚本可以通过首先查看<短划线><的东西>第一?我可以看到用几个if语句编写一个巨大的控制流,但我觉得应该有更好的方法,因为有这么多程序使用这种格式。
答案 0 :(得分:4)
您可以使用getopts
示例:
while getopts "1:2:3:" arg; do
case "$arg" in
1)
echo "Param 1 = $OPTARG"
;;
2)
echo "Param 2 = $OPTARG"
;;
3)
echo "Param 3 = $OPTARG"
;;
esac
done
输出:
$ myscript.sh -1 foo -2 bar -3 baz
Param 1 = foo
Param 2 = bar
Param 3 = baz
$ myscript.sh -3 foo -1 bar
Param 3 = foo
Param 1 = bar
答案 1 :(得分:3)
立即开始,一种方法是使用POSIX“getopts”,您可以通过Google搜索找到教程。但是使用直接打击...
听起来您对处理键值对感兴趣。使用你的例子:
foo -2 parameter2 -1 parameter1 -3 parameter3
处理此问题的直接bash代码可能如下所示:
#!/bin/bash
while [[ $# > 1 ]]
do
key="$1"
shift
case $key in
-1|--parameter1)
parameter1="$1"
shift
;;
-2|--parameter2)
parameter2="$1"
shift
;;
-3|--parameter3)
parameter3="$1"
shift
;;
--default)
DEFAULT=YES
shift
;;
*)
# unknown option
;;
esac
done
我还提供了选项“ - ”,因为大多数命令行实用程序都具有相同参数的双重控件,以便于使用。
希望有所帮助。