Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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中只执行两个相同if语句中的第一个_Bash - Fatal编程技术网

在bash中只执行两个相同if语句中的第一个

在bash中只执行两个相同if语句中的第一个,bash,Bash,我有一个小的bash测试脚本,如下所示: $ cat test #!/bin/bash if ! grep --silent "$1" "$3"; then echo "$1 not matched."; fi; exit 1; if ! grep --silent "$2" "$3"; then echo "$2 not matched."; fi; exit 1; $ cat foobar FOO BAR $ cat test #!/bin/bash #if ! grep --silen

我有一个小的
bash
测试脚本,如下所示:

$ cat test
#!/bin/bash
if ! grep --silent "$1" "$3"; then echo "$1 not matched."; fi; exit 1;
if ! grep --silent "$2" "$3"; then echo "$2 not matched."; fi; exit 1;
$ cat foobar
FOO
BAR
$ cat test
#!/bin/bash
#if ! grep --silent "$1" "$3"; then echo "$1 not matched."; fi; exit 1;
if ! grep --silent "$2" "$3"; then echo "$2 not matched."; fi; exit 1;
还有一个测试文件,如下所示:

$ cat test
#!/bin/bash
if ! grep --silent "$1" "$3"; then echo "$1 not matched."; fi; exit 1;
if ! grep --silent "$2" "$3"; then echo "$2 not matched."; fi; exit 1;
$ cat foobar
FOO
BAR
$ cat test
#!/bin/bash
#if ! grep --silent "$1" "$3"; then echo "$1 not matched."; fi; exit 1;
if ! grep --silent "$2" "$3"; then echo "$2 not matched."; fi; exit 1;
现在我做以下几点:

$ ./test FOO BAR foobar
$ ./test FOOH BAR foobar
FOOH not matched.
$ ./test FOO BARG foobar
$ 
在我看来,最后一次运行时,
/test FOO BARG foobar
应该会产生输出
BARG not matched.
,脚本停止执行。是什么原因使它不能像我期望的那样工作?有没有更好的方法实现同样的逻辑

编辑:

还有,如果我把第二句话注释掉,像这样:

$ cat test
#!/bin/bash
if ! grep --silent "$1" "$3"; then echo "$1 not matched."; fi; exit 1;
if ! grep --silent "$2" "$3"; then echo "$2 not matched."; fi; exit 1;
$ cat foobar
FOO
BAR
$ cat test
#!/bin/bash
#if ! grep --silent "$1" "$3"; then echo "$1 not matched."; fi; exit 1;
if ! grep --silent "$2" "$3"; then echo "$2 not matched."; fi; exit 1;
执行第二条if语句:

$ ./test FOO BARG
$ BARG not matched.

因此,似乎只有第一个连续的if语句被执行。如果我将脚本扩展为具有三个类似的if语句,也会发生这种情况。

您的代码看起来像这样,格式稍微好一些:

#!/bin/bash
if ! grep --silent "$1" "$3"; then
  echo "$1 not matched.";
fi;

exit 1;

if ! grep --silent "$2" "$3"; then
  echo "$2 not matched.";
fi;

exit 1;
可能您希望在ifs中包含退出声明:

#!/bin/bash
if ! grep --silent "$1" "$3"; then
  echo "$1 not matched.";
  exit 1;
fi;

if ! grep --silent "$2" "$3"; then
  echo "$2 not matched.";
  exit 1;
fi;

您的代码看起来是这样的,格式稍微好一点:

#!/bin/bash
if ! grep --silent "$1" "$3"; then
  echo "$1 not matched.";
fi;

exit 1;

if ! grep --silent "$2" "$3"; then
  echo "$2 not matched.";
fi;

exit 1;
可能您希望在ifs中包含退出声明:

#!/bin/bash
if ! grep --silent "$1" "$3"; then
  echo "$1 not matched.";
  exit 1;
fi;

if ! grep --silent "$2" "$3"; then
  echo "$2 not matched.";
  exit 1;
fi;

您的代码看起来是这样的,格式稍微好一点:

#!/bin/bash
if ! grep --silent "$1" "$3"; then
  echo "$1 not matched.";
fi;

exit 1;

if ! grep --silent "$2" "$3"; then
  echo "$2 not matched.";
fi;

exit 1;
可能您希望在ifs中包含退出声明:

#!/bin/bash
if ! grep --silent "$1" "$3"; then
  echo "$1 not matched.";
  exit 1;
fi;

if ! grep --silent "$2" "$3"; then
  echo "$2 not matched.";
  exit 1;
fi;

您的代码看起来是这样的,格式稍微好一点:

#!/bin/bash
if ! grep --silent "$1" "$3"; then
  echo "$1 not matched.";
fi;

exit 1;

if ! grep --silent "$2" "$3"; then
  echo "$2 not matched.";
fi;

exit 1;
可能您希望在ifs中包含退出声明:

#!/bin/bash
if ! grep --silent "$1" "$3"; then
  echo "$1 not matched.";
  exit 1;
fi;

if ! grep --silent "$2" "$3"; then
  echo "$2 not matched.";
  exit 1;
fi;