【问题标题】:while loop read data from two columswhile 循环从两列中读取数据
【发布时间】:2021-11-08 20:25:28
【问题描述】:

根据我在 shell 脚本中使用 while 循环的有限经验,我需要检查新公钥中的远程主机连接。

cat JOBID_LIST.txt
HLC00101 abc@gbl67543.cloud.uk.hlc
HLC01110 absit@DEU010A.cloud.uk.hlc
HLC02568 abftp@GTB19494.systems.uk.hlc
HLC02590 wbsftp@batch.mose.dev.cloud.hlc
HLC02590 cmul1u11@batch.mose.dev.cloud.hlc
HLC02648 dmlfeat@lmd-fileserver-uat.systems.uk.hlc
HLC02648 dmsftp@lmd-fileserver-uat.systems.uk.hlc


#!/bin/bash
cat JOBID_LIST.txt | while read -r JOBID SFTPHOST
do
   if [[ ${JOBID} != "HLC02648" ]]; then
        ssh -q -o BatchMode=yes -o StrictHostkeyChecking=no ConnectTimeout=5 "$SFTPHOST" -i xxxx.pub 'exit 0'
    
           if [[ $? == 0 ] ; then
                echo "Connect to $SFTPHOST in $JOBID in new pubkey successfully."
            else
                echo "Failed to connect to $SFTPHOST in $JOBID in new pubkey "
            fi
   else
     echo "Verify Completely"
     exit 2.
   fi
done

由于某种原因,ssh 命令跳出了 while 循环,因此直到最后的第三个 JOBID 被忽略。 我怎样才能让它检查到文件末尾? 感谢您的建议。

【问题讨论】:

  • ssh 从管道继承其标准输入。因此,它消耗了大量用于 while/read 循环的数据。

标签: shell while-loop do-while


【解决方案1】:

也许在 ssh 调用之前添加 </dev/null 会有所帮助?

#!/bin/bash

while read -r JOBID SFTPHOST; do
   if [ "$JOBID" != "HLC02648" ]; then
      </dev/null \
      ssh -q -o BatchMode=yes -o StrictHostkeyChecking=no \
          ConnectTimeout=5 "$SFTPHOST" -i xxxx.pub 'exit 0'
      if [ $? = 0 ]; then
         echo "Connect to $SFTPHOST in $JOBID in new pubkey successfully."
      else
         echo "Failed to connect to $SFTPHOST in $JOBID in new pubkey "
      fi
   else
      echo "Verify Completely"
      exit 2
   fi
done < JOBID_LIST.txt

【讨论】:

  • 或者你也可以ssh -n
  • 啊。我不知道这个选项。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 2022-01-21
  • 1970-01-01
相关资源
最近更新 更多