Validation Bash脚本函数验证

Validation Bash脚本函数验证,validation,bash,scripting,Validation,Bash,Scripting,我试图对我在脚本中调用的每个函数进行验证,如果一个函数失败,则会出错 寻找最好的方法来做到这一点。我觉得我曾经知道一个很好的方法,但现在想不出来了 我可以用蛮力逼它,但它很恶心。这就是我如何让它正常工作的方法 copy_files $1 if [ "$?" -ne "0" ]; then error "Copying files" return -1 fi 这变得很难看,因为我有一个脚本: 命令1 命令2 命令3 必须用返

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

寻找最好的方法来做到这一点。我觉得我曾经知道一个很好的方法,但现在想不出来了

我可以用蛮力逼它,但它很恶心。这就是我如何让它正常工作的方法

    copy_files $1
    if [ "$?" -ne "0" ]; then
            error "Copying files"
            return -1
    fi
这变得很难看,因为我有一个脚本:

命令1 命令2 命令3

必须用返回来包装所有这些命令不是很理想(请帮忙

command1 || (error "Cmd1 fail"; return -1); command2 || (error "Cmd2 fail"; return -1);
等等。
|
运算符意味着只有在上一个命令失败时,下一个命令才会执行。
&&
则相反。括号将要运行的命令分组


等等。
|
运算符意味着只有在上一个命令失败时,下一个命令才会执行。
&&
则相反。括号将要运行的命令分组。

您可以这样做:

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

你可以这样做:

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

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

set -e

在开始时。如果任何命令返回的状态代码不是0,则该调用会使shell立即退出。(例外情况:作为条件语句中测试一部分的命令,以及后跟
&&
|
的命令和其他命令)

既然您说过要对脚本中的每个命令执行此操作,那么您可以插入

set -e

在开始时。如果任何命令返回的状态代码不是0,则该调用会使shell立即退出。(例外情况:作为条件语句中测试一部分的命令,以及后跟
&&
|
的命令和其他命令)+1表示
|
,但我建议将
返回-1
更改为
退出1
(1是错误代码的标准选择)。这样,您就可以定义一个名为
die
的函数来处理退出部分,然后您可以编写
command1 | | die
command2 | | die
等。这是一种相当常见的做法。我喜欢这样……但是我正在通过执行../myscript.sh来运行我的脚本。如果我在die中执行退出1,它会杀死我的整个终端。有没有关于如何退出脚本而不从脚本中终止终端的想法?+1表示
|
,但我建议将
返回-1
更改为
退出1
(1是错误代码的标准选择)。这样,您就可以定义一个名为
die
的函数来处理退出部分,然后您可以编写
command1 | | die
command2 | | die
等。这是一种相当常见的做法。我喜欢这样……但是我正在通过执行../myscript.sh来运行我的脚本。如果我在die中执行退出1,它会杀死我的整个终端。有没有关于如何退出脚本而不从脚本中杀死我的终端的问题,请考虑设置PS4来更好地跟踪。导出PS4=‘+${BasHySoS}:${LimeNo}:${FixNoY[0 ] }:'如果你这样做,考虑设置PS4更好的跟踪。导出PS4=’+${BasHyStase}:${LeNeNO}:${FixNo[[ 0 ] }:''