shell脚本中的单行if语句不起作用

时间:2012-02-24 20:13:15

标签: bash scripting if-statement

这是我的代码:

#!/bin/bash
cat input$1 | ./prog$1 > output$1 && if[ "$2" != "" ]; diff output$1 expected$1;

然后发生:

$ ./run.sh
./run.sh: line 2: if[ no !=  ]: command not found
$

我以为我可以在一行上运行if语句?问题是什么?

2 个答案:

答案 0 :(得分:18)

事实证明,if[之间需要有空格。另外,我添加了thenfi个关键字。

以下工作。

#!/bin/bash
cat input$1 | ./prog$1 > output$1 && if [ "$2" != "" ]; then diff output$1 expected$1; fi

编辑:

如下面评论(以及另一个答案),这可以优雅地缩短为:

cat input$1 | ./prog$1 > output$1 && [ "$2" != "" ] && diff output$1 expected$1

在这种情况下,我甚至不必记住有关如何使用if构造的任何规则:)

答案 1 :(得分:3)

放弃if。 []将生成一个新的“命令”,如果使用&&&& (如果上一次退出,则运行下一步)。这里:

echo lol &&  [ $((10-1)) -eq 9 ] && echo math\!

和你的单行:

#!/bin/bash
cat input$1 | ./prog$1 > output$1 && [ "$2" != "" ] && diff output$1 expected$1