我有一个脚本可以在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
答案 0 :(得分:1)
Getopt无法获得任意数量的值,但您可以将模块列表作为参数使用"然后解析它:
./script -f /tmp/file.txt --modules "001 002 003"
在您的脚本中,您可以获得每个值:
for module in $MODULES ; do
echo $module
done