我有 if else 问题,但我不确定答案是否正确?

我有 if else 问题,但我不确定答案是否正确?

我在 Linux 上运行这个:

$ number=4
$ test $number -eq 4
$ echo $?
0
$ test $number -lt 2
$ echo $?
1

结果(0 和 1)正确吗?

答案1

在 Unix 系统上,如果实用程序执行顺利、成功且没有错误等,则实用程序将返回零退出状态。如果实用程序失败,它将返回非零退出状态。

这样,就可以通过退出状态告诉用户什么时候出错了(参见“退出值”或某些手册的类似部分,例如 的手册rsync)。简而言之,如果操作成功,退出状态为零,如果不为零,则失败,退出状态可能会说明失败的原因。

您使用的实用程序test遵循此模式,如果比较成功(为“true”),则返回零。如果比较(或它执行的任何操作)失败(它是“假”),它将返回一个非零退出状态。

if关键字采用一个实用程序并对其退出状态起作用。如果实用程序返回零退出状态,则它将采用默认分支,否则它将采用以下else分支:

if test 4 -eq 3; then
    echo 4 is 3
else
    echo 4 is not 3
fi

if可以采用任何实用程序:

if grep -q 'secret' file.txt; then
    echo file.txt contains secret
else
    echo file.txt does not contain secret
fi
if mkdir mydir; then
    echo created directory mydir
else
    echo failed to create directory mydir
fi

答案2

按照惯例,0这意味着操作成功,除 0 以外的任何值都是错误。因此,如果$?0,则测试成功,如果不是0,例如如果是1,则测试失败。

如果你运行这个,你也许会更清楚地看到这一点:

$ number=4
$ if test $number -eq 4; then echo "YES ($?)"; else echo "NO ($?)"; fi
YES (0)
$ if test $number -lt 2; then echo "YES ($?)"; else echo "NO ($?)"; fi
NO (1)

答案3

shell 不是C。在C0 为假时,其他一切都为真。在 shell 0 为真/成功时,其他一切都为假。这是因为失败的方法有很多种,但成功的方法只有一种。

具体来自测试的信息页面。

Exit status:

 0 if the expression is true,
 1 if the expression is false,
 2 if an error occurred.

相关内容