linux - 用于读取包含 IP 地址和登录的文件的脚本

标签 linux bash shell unix

我有一个名为“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/

相关文章:

shell - 使用 Mix 时 Elixir .exs 脚本 "module is not loaded and could not be found"

php - php进程的内存使用情况

java - 使用 Java 运行 Bash 脚本

python - 将参数传递给封装在 shell 脚本中的 Python 脚本

bash - 在 bash 中生成大小写范围

linux - 使用 grep 从订阅管理器中提取数据

shell - 如何在 Unix 中 grep 包含超过 1 个单词的行

linux - 无法更新 iceauthority 文件/var/lib/gdm/.iceauthority

linux - Grep 并增加值

linux - 如果变量声明在 bash 中的 for 循环内,为什么不能更改输入数据