嵌套If语句与ssh

时间:2017-04-21 12:36:31

标签: bash if-statement ssh

我正在尝试创建一个脚本,A)循环浏览IP列表并对其进行ping操作,如果成功尝试使用已知凭据登录,如果成功,则将主机添加到列表中以便操作不重复

如果A)主机无法ping或B)如果可用且我的已知凭据有效,则此脚本按预期运行。如果它可以ping主机但ssh连接被拒绝,则脚本退出而不是使用下一个变量(或IP)。谢谢!

到目前为止我所拥有的:

while read p; do
  ping -c1 -t1 $p
  if [ $? -eq 0 ]
  then
    /usr/local/bin/sshpass -p $PW ssh -o StrictHostKeyChecking=no "$USR"@"$p" </dev/null "
    scutil --get ComputerName" | tee -ai $WORKING

    MACHINE=$(head -n 1 $WORKING)

    if grep -Fxq $MACHINE "$FULL"
    then
      echo $MACHINE has been worked on already

    else
      echo $MACHINE has not been worked on
      echo $MACHINE >> $FULL
      rm -rf $WORKING
    fi

  else
    echo ping fail
  fi
done </iprange.txt

1 个答案:

答案 0 :(得分:1)

我不完全确定问题是什么,但看起来你的ssh命令可能正在从你的STDIN循环中吃掉while read

尝试更改read命令正在读取的FD:

while read -u 9 -r p ; do
  echo "$p"
done 9< /iprange.txt

或者尝试使用-n参数sshSTDIN重定向/dev/null(阻止从STDIN读取/iprange.txt )。