Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash脚本中,我可以使用&&;将两个命令行参数组合在一起_Bash_Scripting - Fatal编程技术网

在bash脚本中,我可以使用&&;将两个命令行参数组合在一起

在bash脚本中,我可以使用&&;将两个命令行参数组合在一起,bash,scripting,Bash,Scripting,以下是一个片段: 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

以下是一个片段:

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 对于“$@”中的arg;做 如果[$arg==“--coverage”];然后 启用_覆盖率=1 转移 elif[$arg==“--mysql”];然后 MYSQL_ONLY=1 转移 elif[$arg==“--psql”];然后 仅PSQL_=1 转移 elif[$arg==“-h”]| |[$arg==”--help”];然后 使用 转移 elif[$arg==“--qa”];然后 仅QA_=1 仅PSQL_=1 MYSQL_ONLY=1 转移 elif[$arg==“--qa”]&&&[$arg==“--mysql”];然后 仅QA_=1 MYSQL_ONLY=1 转移 elif[$arg==“--qa”]&&&[$arg==“--psql”];然后 仅QA_=1 仅PSQL_=1 转移 elif[$arg==”--“];然后 移位 打破 fi 完成
$arg
永远不能同时等于
--qa
--mysql

如果你在谈论不同的论点,那么是的,你可以这样做:

if [[ $arg1 == "--qa" && $arg2 == "--mysql" ]] ; then
    QA_ONLY=1
    MYSQL_ONLY=1
fi

但我经常发现,最好是按顺序扫描参数,为每个参数设置一个标志,然后使用标志来决定行为。否则,您要么将命令行参数限制为特定的顺序(
xyz--qa--mysql
将起作用,但
xyz--mysql--qa
将不起作用),要么您的代码变得非常复杂,因为它试图检查每个参数是否存在任何可能性。

如果您可以在bash中调用getopt,则无法调用getopt,它不应该使用长选项名。使用getopts而不是getopt。(下面是一个示例)


--qa和--psql是分开的参数我正在使用@$(在问题中添加了更多的代码),$arg1和$arg2在这里不起作用,对吗?我想在bash中对两个命令行参数进行分组,所以我可以使用&&操作符,如:elif[$arg==“-h”]|[$arg==”--help”];然后使用转移您知道您也可以这样做:
elif[$arg==”-h“-o$arg==”--help“]
elif[$arg==”--qa“-a$arg==”--mysql”]
。这可能会让你更清楚地知道你想做什么。是的,您可以使用
&&
对这两个测试进行测试。这两个选项都是分组的,所以它们必须一起处理(我添加了更多的代码,希望能有所帮助)elif[$arg==”--qa”]&&&[$arg==”--mysql”];这似乎是可行的,但我想验证一下,如果我能把这样的论点组合在一起,是否有人有这样做的经验。@kamal:我们一直在告诉你$arg不能同时等于--qa和--mysql$arg可能是不同时间的这两个值,但这是一个完全不同的测试(当您检测到第一个时,保存该状态,稍后当您检测到第二个时,查看是否检测到第一个)。感谢您最终获得了它,不过花了一段时间。
#!/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