当我尝试在bash中使用for循环时,错误



我尝试在循环中运行循环时有问题。

我尝试使用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风格的循环更多的内存。

相关内容

  • 没有找到相关文章

最新更新