我试图检查一个数组中的所有服务器,看看它们是否配置了SSH无密码信任。
如果没有,我想打印服务器详细信息,并继续循环遍历数组元素(ips)
(我想在退出之前有机会打印所有错误的。)
我尝试了以下方法,但它在遇到第一个未配置的服务器后退出循环:
for svr in "${table[@]}"
do
SSH=$(ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=no $svr echo)
if $(echo [ $? -ne 0 ])
then echo "Trust is not configured for ${table[$svr]}"
exit "$SOME"
else
:
fi
done
我做错了什么?
嗯,直接的问题是,在循环的中间有一个退出命令...当脚本到达那个点时,它实际上会退出脚本。如果您不希望它在循环运行完成之前退出,请在循环之后放置退出命令。
但是您也在检查ssh
是否以一种非常奇怪的方式成功。除非有什么我不明白的地方,只要把ssh
命令直接放在if
条件中,并用
for svr in "${table[@]}"
do
if ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=no $svr echo >/dev/null 2>&1
then
echo "Trust is not configured for $svr"
fi
done
exit "$SOME"
注意,我还修复了对
${table[$svr]}
(这没有意义)的引用,并删除了else
子句(它没有做任何事情)。还有,什么是$SOME
?
编辑:如果您希望它在任何服务器连接失败时退出,您需要跟踪循环运行时是否有故障,然后使用它来控制它是否在结束时退出。
failures=0
for svr in "${table[@]}"
do
if ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=no $svr echo >/dev/null 2>&1
then
echo "Trust is not configured for $svr"
((failures++))
fi
done
if ((failures>0))
then
exit
fi
问题内容: 目前无法打破此循环。如果要在此列表中找不到变量,我想破坏它,以便它可以移动另外两个循环。它期望在循环的顶部有一个缩进的块,但是如果更改循环的开头或开头的位置,它将无法正常工作。救命! 问题答案: 正如人们在对您的问题的评论中提到的那样,您需要分别打破每个循环,仅停止其所在的循环 两个 循环都需要这样做 如果您也想打破while循环,那么您也可以添加该循环。
我有一个380行20列的表格。我想从该表中删除符合特定条件的行。 为了澄清问题,假设我有以下列表: 我想删除在列表中找到姓名的所有人员的数据。 例如,假设我的数据如下所示: 我想删除、和的数据。所以输出应该是: 我的代码正在运行,但数据没有从我的原始数据中删除。当我打开新的测试.txt文件时,我可以看到数据没有被删除。 我可以肯定错误在< code > if data[row][0]= =(I f
这是一些我更愿意自己解决的工作,所以如果可能的话,请不要直接给出答案,但也许可以给我指明正确的方向,为什么我会从循环输出中收到错误,为什么if语句不会产生输出。 你知道是什么导致了这一切吗?
这个程序基本上允许用户输入任何单词,直到他/她输入单词“last”。 如果单词包含字母“s”,则应显示单词确实包含“s”或“s”,否则应显示单词不包含“s”或“s”。 示例:用户输入的单词= •约翰 詹姆斯 •馅饼 莎莉 结果: 约翰不包含's'或'S' James确实包含“s”或“s” 馅饼不含's'或'S' Sally不包含“s”或“s” 该程序可以工作,但我需要更改if语句,以便它使用equ
由于某种原因,在我输入“停止”后,代码不会退出。为什么?逐步调试表明,在我输入“stop”后,它的值完全由“s”、“t”、“o”、“p”组成,没有任何换行符,等等。然而,代码仍然无法退出。谁能告诉我为什么吗?