嵌套如果声明与ssh
问题描述:
我试图创建一个脚本,将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
答
我不能完全确定的问题是什么,但它看起来像你的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
)。
那么最新的问题? – 123
当ssh连接被拒绝时,为什么它不会循环到下一个变量?如果我删除嵌套的if循环它按预期方式工作 – Havens
什么是“if循环”?哦,请发表[mcve]。你的例子不是最小的。 – Heinzi