带有输出的 Bash 脚本

带有输出的 Bash 脚本

我有一台服务器,需要每天向远程机器发送一些文件。

我已经完成了这个脚本以便自动执行这个任务。

我需要在这个脚本中插入什么才能查看这个任务是否已成功完成?

这两个任务,第一个任务是发送文件,另一个任务是强制该机器重新启动。

#!/bin/sh
    for server in `more server-list.txt`
do
   sshpass -p password scp -r /root/list/*.* root@$server:/etc/list/
done
sleep 5
for server in `more server-list.txt`
do
   sshpass -p password ssh root@$server /sbin/reboot
done
#server-list.txt
10.29.0.32 10.29.0.4 10.29.0.11 10.29.0.12 10.29.0.13 10.29.0.14

执行以下命令运行脚本后,仅得到以下输出

root@VPS:~#./sendingfiles.sh
root@VPS:~#

有时我会收到一条错误消息,提示主机连接超时,但没有告诉我哪个主机发生故障,我也不知道哪个主机已成功重启

答案1

变量“$?”存储前一条命令的结果。

  • 0 = 成功
  • 1-127 = 记录错误
  • (-128)-(-1)=操作系统通过某个信号终止了该程序

因此也许:

sshpass -p password ssh root@$server /sbin/reboot
if [ $? -eq 0 ]; then
  echo "$server - Successfully rebooted"
else
  echo "$server - Failed to reboot"
fi

答案2

  1. cat server-list.txtmore server-list.txt(更多内容已分页)
  2. 如果你正在编写脚本,使用无密钥密码可能比通过sshpass -p password
  3. 使用$()而不是`例如for server in $(cat server-list.txt)

最后,脚本中有一些 echo 语句

附言:这个问题最好在 SuperUser 上提出

相关内容