这是一个非常简单的脚本,但我似乎无法正确运行它。此代码应该从192.168.0.0 - 192.168.255.255打印类C IP地址,但打印出来的仅仅是192.168.0.0 - 192.168.0.255。由于某种原因,我的外部循环不会循环。我确信这是一些愚蠢的错误,但这可能对那些学习Shell脚本嵌套循环的人有所帮助。欢迎提供其他建议!
#! /bin/sh
network_id="192.168."
count1=-1
count2=-1
while [ "$count1" -le 254 ]
do
count1=$(($count1+1))
while [ "$count2" -le 254 ]
do
count2=$(($count2+1))
printf "%s%s%s%s\n" $network_id $count1 "." $count2
done
done
exit 0
#!/bin/sh
在 POSIX 兼容模式下运行脚本时,这意味着它们将是可移植的。下面的答案建议使用{0..255}
。虽然 BASH 可以扩展它,但其他 POSIX /bin/sh 实现可能不会。如果您正在为 bash 编写代码,则最好使用#!/usr/bin/env bash
作为您的 shebang。如果您要编写可移植性代码,则最好不要使用 bashisms。 - ghotiwhile
循环的答案在内部while
完成后都重置了count2
。我会在它开始之前设置它(而不是在外层循环开始之前)。但两种技巧都可以实现相同的结果。 - Jonathan Leffler