if ssh 条件退出 while 循环但未完成

if ssh 条件退出 while 循环但未完成

我在 AIX 中有一个脚本,用于从 os_init.d 目录读取所有主机并收集它们的 Ipv4 IP 并将它们存储在文件中。然后使用该文件通过 ssh 连接到每个主机,以通过其他脚本收集各种数据[此处不相关]。

  1. 当主机不可访问并且具有 IPv4 IP 地址时 --> 没有错误,while 循环继续
  2. 当主机不可访问并且具有 IPv6 IP 地址时 --> 没有错误,while 循环继续
  3. 当主机可访问并且具有 IPv6 IP 地址时 --> while 循环继续但存在但不经过循环。

我似乎无法弄清楚为什么在最后一个条件中,在成功执行可访问的 IPv6 主机的 if 条件后, while 循环将退出而不继续。

#!/usr/bin/bash
# Sumit Das 2016 12 26
# Find All PHYsical HOSTs and their IP in a cluster

#set -x
#cd /home/users/in10c2/moni
ls -1 /cAppCom/os_init.d | grep dcpaix > listPHYSERV
FN='listPHYSERV'
rm listPHYIP 2> /dev/null
while read LINE
do
  PHYHOST=$LINE
  PHYHOSTIP=`ping -c 1 $LINE | grep PING | awk '{print $3}' | cut -c2- | rev | cut -c3- | rev`

  IPV6IPchk=`echo $PHYHOSTIP | cut -c -4`
  if [ $IPV6IPchk = "2a00" ] 
    then 
    ssh -q -o ConnectTimeout=10 -o BatchMode=yes -o StrictHostKeyChecking=no $LINE ifconfig -a > IFCNF 
    PHYHOSTIP=`awk '/en2:/{x=NR+1;next}(NR<=x){print}' IFCNF | awk '{print $2}'` 
    rm IFCNF
  fi

  echo "$PHYHOST,$PHYHOSTIP" >> listPHYIP
done < $FN

cat listPHYIP
cp  ALL_PHY_HOSTIP_`uname -n`.txt

答案1

您需要使用ssh -n,否则成功ssh会消耗标准输入,并且您的while循环将没有任何内容可读取。

相关内容