我有一个小的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语句,也会发生这种情况。
答案 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;