我有一个名为“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
答案 0 :(得分:1)
在ssh
命令完成之前,您的脚本不会继续,但$HOST
退出的ssh
上的交互式shell不会发生这种情况。相反,您希望在 $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
的值传递给远程主机的麻烦,从而简化了远程脚本所需的引用。