2017-04-21 4 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を食べているように見えます。

があなたのreadコマンドから読んでいるFD変更してみてください次のいずれかの

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

するか、/dev/nullからSTDINをリダイレクトあなたのsshコマンドに-n引数を使用してみてください(/iprange.txtからあなたSTDINの読み取りを防止します)。

関連する問題