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

时间:2014-06-18 08:06:34

标签: 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

现在我执行以下操作:

$ ./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;

执行第二个if语句:

$ ./test FOO BARG
$ BARG not matched.

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

1 个答案:

答案 0 :(得分:3)

您的代码看起来像这样,格式更好:

#!/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;