这是一个片段:
for arg in "$@"; do if [ $arg == "--coverage" ]; then ENABLE_COVERAGE=1 shift elif [ $arg == "--mysql" ]; then MYSQL_ONLY=1 shift elif [ $arg == "--psql" ]; then PSQL_ONLY=1 shift elif [ $arg == "-h" ] || [ $arg == "--help" ]; then usage shift elif [ $arg == "--qa" ]; then QA_ONLY=1 PSQL_ONLY=1 MYSQL_ONLY=1 shift elif [ $arg == "--qa" ] && [ $arg == "--mysql" ]; then QA_ONLY=1 MYSQL_ONLY=1 shift elif [ $arg == "--qa" ] && [ $arg == "--psql" ]; then QA_ONLY=1 PSQL_ONLY=1 shift elif [ $arg == "--" ]; then shift break fi done
答案 0 :(得分:1)
$arg
永远不会同时等同于--qa
和--mysql
。
如果您正在讨论不同的参数,那么是的,您可以这样做:
if [[ $arg1 == "--qa" && $arg2 == "--mysql" ]] ; then
QA_ONLY=1
MYSQL_ONLY=1
fi
但我经常发现,只需按顺序扫描参数,为每个参数设置一个标志,然后使用标志来决定行为,这是一个更好的主意。否则,您要么将命令行参数限制为特定顺序(xyz --qa --mysql
将起作用,xyz --mysql -- qa
将不起作用),或者您的代码变得非常复杂,因为它试图检查每个反对每种可能性的论据。
答案 1 :(得分:0)
如果你可以在bash中调用getopt,你不能调用getopt,它不应该使用长选项名称。使用getopts而不是getopt。(下面是一个例子)
#!/bin/bash
while getopts qm OPT
do
case $OPT in
q) opt_qa=1;;
m) opt_mysql=1;;
esac
done
if [ $opt_qa = 1 ]; then
# do as qa
fi
if [ $opt_mysql = 1 ]; then
# do as mysql
fi