4

我编写了以下 shell 脚本,只是为了看看我是否理解使用 if 语句的语法:

if 0; then
        echo yes
fi

这行不通。它产生错误

./iffin: line 1: 0: command not found

我究竟做错了什么?

4

3 回答 3

8

利用

if true; then
        echo yes
fi

if 期望命令的返回码。0不是命令。 true是一个命令。

bash 手册在这个主题上没有说太多,但这里是: http ://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs

您可能需要查看test命令以获取更复杂的条件逻辑。

if test foo = foo; then
        echo yes
fi

又名

if [ foo = foo ]; then
        echo yes
fi
于 2013-05-29T07:53:40.213 回答
5

要测试数字是否非零,请使用算术表达式:

 if (( 0 )) ; then
     echo Never echoed
 else
     echo Always echoed
 fi

但是,使用变量比使用文字数字更有意义:

count_lines=$( wc -l < input.txt )
if (( count_lines )) ; then
    echo File has $count_lines lines.
fi
于 2013-05-29T08:00:47.600 回答
0

好吧,从bash手册页:

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

  The if list is executed.  If its exit status is zero, the then list is executed.
  Otherwise, each elif list  is  executed  in  turn, and if its exit status is zero,
  the corresponding then list is executed and the command completes.
  Otherwise, the else list is executed, if present.
  The exit status is the exit status of the last command executed,
  or zero if no condition tested true.

这意味着if执行该参数以获取返回码,因此在您的示例中,您尝试执行 command 0,这显然不存在。

确实存在的是命令和true,它们也被别名为。它允许为s 编写更复杂的表达式。阅读以获取更多信息。falsetest[ifman test

于 2013-05-29T07:55:50.130 回答