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 ] }:''