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

标签 bash shell

我有一个执行各种操作的 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 ];然后... 但我想知道是否有任何其他方法可以做到这一点,因为编写 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"

关于Bash:如何检查一些操作是否成功完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21675612/

相关文章:

linux - 使用此处文档为用户提供多种选择

python - python 上 os.system 中的大括号

bash - 在 Bash 中转写十六进制字符

python - 使用 glob 参数递归匹配文件名

linux - 如何在 bash 变量中提取虚线分隔单词的首字母?

linux - shell脚本中变量的赋值

linux - 在 Unix 中递归地用先前回显的值替换回显值

Bash:从另一个时区获取日期和时间

linux - 用于为没有特定文件的目录运行程序的 bash 脚本

linux - 如何在没有 sudo 的情况下运行命令?