如何编写一个使用其他参数指定的参数的bash脚本?

时间:2014-07-10 21:02:54

标签: bash

从命令行调用时,我一直在使用多个使用以下格式的程序:

foo -1 parameter1 -2 parameter2 -3 parameter 3 

并且参数的顺序无关紧要,只要它们后跟正确的参数(我假设破折号后跟某些东西也是参数)。所以这与上面的相同:

foo -2 parameter2 -1 parameter1 -3 parameter3 

编写bash脚本的最有效方法是什么,该脚本可以通过首先查看<短划线><的东西>第一?我可以看到用几个if语句编写一个巨大的控制流,但我觉得应该有更好的方法,因为有这么多程序使用这种格式。

2 个答案:

答案 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

SO - example of how to use getopts in bash

答案 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

我还提供了选项“ - ”,因为大多数命令行实用程序都具有相同参数的双重控件,以便于使用。

希望有所帮助。