Bash getopt - 移位多个参数

时间:2016-01-29 10:11:10

标签: bash shift getopt

我有一个脚本可以在Ubuntu机器上启动一些检查。

我这样称呼我的脚本:./script -f /tmp/file.txt --modules 001 002 003

所有文件001,002等都是bash脚本。

以下主要功能是我的问题:

main () {
OPTS=`getopt -o hf:m: --long help,file:,modules: -n 'script.sh' -- "$@"`

eval set -- "$OPTS"
    [ $# -eq 0 ] && echo "Unknown options or parameters" && USAGE

while [ $# -gt 0 ]; do
    case "$1" in
            -f|--file)
               FILE="$2"
               shift
               ;;
            -h|--help)
               USAGE
               exit 1
               ;;
            -m|--modules)
               MODULES="$2"
               shift
               ;;
    esac
    shift
done

[ -z "$MODULES" ] && echo "No module specified" && USAGE
}

我希望$ MODULES变量包含例如001 002 004 我尝试了不同的转变,但这有些复杂......

理想情况下,如果我可以使用" $ @"作为其余的脚本设置,这可能很棒。

编辑:最后./script.sh -f /tmp/file.txt --modules "001 002 003" $ MODULES变量包含" 001 002 003" , 例如。

但我有一个for循环似乎没有迭代所有的args,只在第一个...每个$module包含" 001 002 003"。

for module in "$MODULES"; do 
    echo "Importing Module $module"
    . modules/$module >> "$FILE" 
done

1 个答案:

答案 0 :(得分:1)

Getopt无法获得任意数量的值,但您可以将模块列表作为参数使用"然后解析它:

./script -f /tmp/file.txt --modules "001 002 003"

在您的脚本中,您可以获得每个值:

for module in $MODULES ; do  
   echo $module
done