Bash:如何检查一些操作是否成功完成



我有一个bash脚本,它可以执行各种操作,例如:

scp $workdir/$site$dom.conf root@$srv13:$workdir
scp $workdir/$site$dom.conf root@$srv179:$workdir
ssh root@$srv13 "hostname ; service httpd restart"
ssh root@localhost "hostname ; service httpd restart"
ssh root@$srv179 "hostname ; service httpd restart"
ssh root@$srv201 "hostname ; service named restart"

我想返回一些"操作成功"的指示,但我想确保所有操作都成功完成。通常我会使用if [ $? = 0 ]; then...,但我想知道是否有其他方法可以做到这一点,因为编写5xif's似乎不像是"最少的管理工作量"。那么,有没有其他方法可以批量检查这5个操作的退出代码?

如果在任何操作失败时需要失败,那么只需在脚本顶部执行set -e即可。一旦任何一步失败,它就会失败。

如果你可以处理任何单独的步骤失败,但只想跟踪失败的次数,那么你可以尝试这个:

success_count=0
scp $workdir/$site$dom.conf root@$srv13:$workdir && success_count=$((success_count+1))
scp $workdir/$site$dom.conf root@$srv179:$workdir && success_count=$((success_count+1))
ssh root@$srv13 "hostname ; service httpd restart" && success_count=$((success_count+1))
ssh root@localhost "hostname ; service httpd restart" && success_count=$((success_count+1))
ssh root@$srv179 "hostname ; service httpd restart" && success_count=$((success_count+1))
ssh root@$srv201 "hostname ; service named restart" && success_count=$((success_count+1))
echo "Num ops succeeded = $success_count"

你甚至可以把它拉到一个函数中,比如:

exec_with_count() {
"$@" && success_count=$((success_count+1))
}
exec_with_count scp $workdir/$site$dom.conf root@$srv13:$workdir
exec_with_count scp $workdir/$site$dom.conf root@$srv179:$workdir
...
echo "Num ops succeeded = $success_count"

您可以使用&&来连锁操作,但可能您已经排除了这种可能性?

scp $workdir/$site$dom.conf root@$srv13:$workdir &&
scp $workdir/$site$dom.conf root@$srv179:$workdir &&
ssh root@$srv13 "hostname service httpd restart" &&
ssh root@localhost "hostname  service httpd restart" &&
ssh root@$srv179 "hostname service httpd restart" &&
ssh root@$srv201 "hostname service named restart" &&
echo "All ok"

相关内容

  • 没有找到相关文章

最新更新