代码之家  ›  专栏  ›  技术社区  ›  Blaine Mucklow

bash脚本函数验证

  •  0
  • Blaine Mucklow  · 技术社区  · 16 年前

    我正在尝试对调用脚本的每个函数进行验证,如果一个函数失败,则会出错整个脚本。

    寻找最好的方法。我觉得我知道一个很好的方法,但我想不出来了。

    我可以蛮力的,但很讨厌。这就是我如何使它正常工作的方法

        copy_files $1
        if [ "$?" -ne "0" ]; then
                error "Copying files"
                return -1
        fi
    

    因为我有一个剧本:

    命令1 命令2 命令3

    必须用返回值包装所有这些命令并不理想。:(请帮忙!

    3 回复  |  直到 16 年前
        1
  •  3
  •   Blue Peppers    16 年前
    command1 || (error "Cmd1 fail"; return -1); command2 || (error "Cmd2 fail"; return -1);
    

    等等。 || operator表示只有在上一个命令失败时才会执行下一个命令。 && 相反。括号对要运行的命令进行分组。

        2
  •  1
  •   David Z    16 年前

    因为您说过要为脚本中的每个命令执行此操作,所以可以插入

    set -e
    

    开始的时候。如果有任何命令返回0以外的状态代码,则该调用将使shell立即退出。(异常:作为条件语句测试的一部分的命令,以及后面跟着的命令) && || 以及进一步的命令)

        3
  •  0
  •   miedwar    16 年前

    你可以这样做:

    good() { 
        return 0;
    }
    
    bad() {
        return 5;
    }
    
    wrapper() { 
        $1  
    
        rc=$?
    
        if [ "$rc" -ne "0" ]; then
                echo "error: $1 returned $rc"
                exit -1
        fi  
    }
    
    
    wrapper bad 
    wrapper good
    

    或者,如果您可以传递函数列表,例如:

    wrapper() {
        for f in $*; do
    
            $f 
            rc=$?
    
            if [ "$rc" -ne "0" ]; then
                    echo "error: $f returned ${rc}"
                    return -1
            fi
        done
        return 0;
    }
    
    
    wrapper good bad
    
    if [ "$?" -ne "0" ]; then
        #error handling here
        exit -1;
    fi