2017-04-21 104 views
0

我试图创建一个脚本,将A)循环通过IP列表并ping它们,如果成功尝试登录使用已知的凭据,如果成功与主机添加到列表这些行为不会重复。嵌套如果声明与ssh

如果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 
+0

那么最新的问题? – 123

+0

当ssh连接被拒绝时,为什么它不会循环到下一个变量?如果我删除嵌套的if循环它按预期方式工作 – Havens

+0

什么是“if循环”?哦,请发表[mcve]。你的例子不是最小的。 – Heinzi

回答

1

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

可尝试哪些FD您read命令是从阅读变化:

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

或者尝试使用-n参数传送给ssh命令从/dev/null重定向STDIN(防止你STDIN的阅读从/iprange.txt)。