2017-04-21 160 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)。