我有一个名为“host.txt”的文件,其中列出了两个系统的 IP 地址。
~] cat hosts.txt
10.1.1.10
10.1.1.20
我尝试使用以下脚本登录每个系统,检查服务状态并打印每个系统的输出。脚本提示登录,但是没有继续执行/opt/agent.sh status 命令。有人可以帮忙修复这个脚本吗?
#!/bin/bash
for HOST in `cat hosts.txt`
do
ssh root@$HOST
STATUS=`/opt/agent.sh status | awk 'NR==1{print $3 $4}'`
echo $STATUS
if [ $STATUS! == "isrunning" ]; then
echo "$host == FAIL"
else
echo "$host == PASS"
fi
最佳答案
在 ssh
命令完成之前,您的脚本不会继续,这不会发生在 $HOST
上的交互式 shell 上,您使用 ssh
启动导出。相反,您想在 $HOST
上执行脚本。
(另外,请注意迭代 hosts.txt
内容的正确方法。)
#!/bin/bash
while read HOST; do
do
if ssh root@$HOST '
STATUS=`/opt/agent.sh status | awk 'NR==1{print $3 $4}'`
[ "$STATUS" = "isrunning" ]
'; then
echo "$HOST == FAIL"
else
echo "$HOST == PASS"
fi
done < hosts.txt
远程脚本简单地退出,将 $STATUS
与“isrunning”进行比较的结果。本地主机上的 if
语句根据该结果(这是 ssh
命令本身的结果)输出一个字符串。这省去了必须将 $HOST
的值传递给远程主机的麻烦,简化了远程脚本所需的引用。
关于linux - 用于读取包含 IP 地址和登录的文件的脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22201911/