我尝试在循环中运行循环时有问题。
我尝试使用IPS进行24个文件。
要在第一个文件中解释更多内容,我需要让所有结束1-10和第二11至20的IP,依此类推。
我尝试使用:
for i in {1..240}
do
for r in {1..24}
do
if [ "$i" -le "$r0" ]
then
echo "4.2.2.$i" >> "server-$r"
fi
done
done
我发现的错误是运行bash -xv script_name:
script_name: line 5: [: : integer expression expected
+ for r in '{1..24}'
+ '[' 240 -le '' ']'
script_name: line 5: [: : integer expression expected
+ for r in '{1..24}'
+ '[' 240 -le '' ']'
script_name: line 5: [: : integer expression expected
文件名是服务器-R,IE Server-1,server-2,等到Server-24
有建议吗?
谢谢。
错误在以下:
if [ "$i" -le "$r0" ]
您没有可变的r0
,这会导致错误。说:
if [ "$i" -le "${r}0" ]
而不是避免歧义。
由于您想将数字乘以10,因此您可以数学地写入:
if [ "$i" -le $((r*10)) ]
甚至
(( i <= r*10 ))
这不是bash-native/惯用方式来做事情。
for ((i=1; i<=240; i++)); do
for ((r=1; r<=24; r++)); do
if (( i <= (r * 10) )); then
echo "4.2.2.$i"
fi
done >"server-$r"
done
每个$r
值仅打开server-$r
文件一次比为每个单独的echo
打开它的效率要高得多(否则您每次需要访问该文件),并且使用诸如{1..3}
的扩展是不灵活(仅由字面数字支持,而不是变量支持),并扩展到迭代的单词列表,因此使用的内存比使用c风格的循环更多的内存。