if语句和调用函数如果使用bash

Jum*_*Box 27 testing bash if-statement

我写了函数

check_log(){
    if [ -f "/usr/apps/appcheck.log" ]
    then
         return 1
    else
         return 0
    fi
}
Run Code Online (Sandbox Code Playgroud)

然后我在if条件下调用此函数

if [ check_log ];
then
    ........statements....
fi
Run Code Online (Sandbox Code Playgroud)

这会有用吗?我很困惑,因为bash在成功时返回0,在失败时返回1.但我的函数返回1并且条件检查1/0,它得到1并且它应该给出失败,但是在我的shell脚本条件中正在传递.

任何人都可以通过这个问题解决一下吗?

谢谢 !

Joh*_*ica 53

if [ check_log ];
Run Code Online (Sandbox Code Playgroud)

使用方括号时,您正在调用该test命令.它等同于if test check_log简写if test -n check_log,这反过来意味着"如果"check_log"不是空字符串".它根本不会调用你的check_log功能.

把它改成这个:

if check_log;
Run Code Online (Sandbox Code Playgroud)

顺便说一下,函数可以更简单地写成:

check_log() {
    ! [ -f "/usr/apps/appcheck.log" ]
}
Run Code Online (Sandbox Code Playgroud)

函数的返回值是最后一个命令的退出状态,因此不需要显式的return语句.

  • 我不会称 0 为“假”。退出代码不是布尔值。最好将它们视为*错误代码*。成功的方式有一种,但失败的方式有很多种,因此我们将成功编码为 0,将失败编码为其他任何值。 (2认同)