Bash - if / elif语句逻辑报告错误

时间:2018-03-20 01:57:15

标签: bash if-statement grep

我有一个脚本,用于检查hosts文件中的主机列表,连接然后检查文件以查看输出是什么,如果输出是两个特定字符串,则bash脚本报告该进程失败

我已经写了一些看起来像它应该没有问题的东西,我甚至尝试过没有脚本在解释器上运行它返回我期望的,但是当在脚本中运行时它没有给出所需的反馈

它报告主机#2的进程失败,而实际上它无法连接到主机#2。

代码

#!/bin/bash
FILE='InternalAL2'
touch $FILE
BADPROCESS=()
for ip in $(cat /etc/hosts | grep serverAL2.[9][0-9][0-9][0-9] | awk {' print $2 '})
do ssh -n -f $ip -i ~/.ssh/personal.ssh "sleep 1; cat /etc/internalstate.txt | grep Status" > $FILE.txt
if cat $FILE.txt | grep "NOT RUNNING" ; then
   echo "NOT RUNNING detected on $ip"
   BADPROCESS+=($ip)
elif cat $FILE.txt | grep "STOPPED" ; then
   echo "STOPPED detected on $ip"
   STOPPED+=($ip)
else
   echo "ALL OK ON $ip"
fi
printf "$ip checked \n"
done

托管文件

serverAL2.9000 <--- NOT RUNNING in file
serverAL2.9001 <--- Unreachable, timed out
...

输出

  • $ FILE内部是'状态不运行'
  • 当报告“NOT RUNNING”
  • 时,它会在“serverAL2.9000”上报告“ALL OK”
  • 然后尝试连接到'serverAL2.9001',失败并在'serverAL2.9001'上报告NOT RUNNING
  • 如果进程正在运行,所有其他主机都会返回,很好。

我不知道为什么它会在检查文件内容之前跳过

0 个答案:

没有答案