Bash getopt - 移动多个参数
Bash getopt - shift multiple parameters
我有一个脚本可以在 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 "" in
-f|--file)
FILE=""
shift
;;
-h|--help)
USAGE
exit 1
;;
-m|--modules)
MODULES=""
shift
;;
esac
shift
done
[ -z "$MODULES" ] && echo "No module specified" && USAGE
}
我希望 $MODULES 变量包含例如 001 002 004
.
我用 shift 尝试了不同的东西,但这有点复杂..
理想情况下,如果我可以使用“$@”作为脚本设置的其余部分,那就太好了。
编辑:例如,随着 ./script.sh -f /tmp/file.txt --modules "001 002 003"
最后 $MODULES 变量包含 "001 002 003" 。
但是我有一个 for 循环,它似乎没有迭代所有的参数,只在第一个......每个 $module
包含“001 002 003”。
for module in "$MODULES"; do
echo "Importing Module $module"
. modules/$module >> "$FILE"
done
Getopt 无法获取任意数量的值,但您可以将模块列表作为参数传递给 usign ",然后对其进行解析:
./script -f /tmp/file.txt --modules "001 002 003"
在您的脚本中,您可以获得每个单独的值:
for module in $MODULES ; do
echo $module
done
我有一个脚本可以在 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 "" in
-f|--file)
FILE=""
shift
;;
-h|--help)
USAGE
exit 1
;;
-m|--modules)
MODULES=""
shift
;;
esac
shift
done
[ -z "$MODULES" ] && echo "No module specified" && USAGE
}
我希望 $MODULES 变量包含例如 001 002 004
.
我用 shift 尝试了不同的东西,但这有点复杂..
理想情况下,如果我可以使用“$@”作为脚本设置的其余部分,那就太好了。
编辑:例如,随着 ./script.sh -f /tmp/file.txt --modules "001 002 003"
最后 $MODULES 变量包含 "001 002 003" 。
但是我有一个 for 循环,它似乎没有迭代所有的参数,只在第一个......每个 $module
包含“001 002 003”。
for module in "$MODULES"; do
echo "Importing Module $module"
. modules/$module >> "$FILE"
done
Getopt 无法获取任意数量的值,但您可以将模块列表作为参数传递给 usign ",然后对其进行解析:
./script -f /tmp/file.txt --modules "001 002 003"
在您的脚本中,您可以获得每个单独的值:
for module in $MODULES ; do
echo $module
done