【发布时间】:2017-03-06 22:25:34
【问题描述】:
我只是无法让下面的代码工作。
代码:
#!/bin/bash
ip=$1
first=$2
last=$3
if (( $first >= 1 && $first <= 255 && $last >= 1 && $last <= 255 && $first <= $last)); then
range=0
else
range=1
fi
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0]$ ]]; then
OIFS=$IFS
IFS='.'
ip=($ip)
IFS=$OIFS
[[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
&& ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
VIP=0
else
VIP=1
fi
if (( $range == 0 && $VIP == 0)); then
echo "intiating ping scan for $1 $first-$last"
echo ""
echo "==================================================="
for i in $(seq $first $last); do ping -c 1 ${ip[0]}.${ip[1]}.${ip[2]}.$i > /dev/null;done
if [ $? -eq 0 ]; then
echo "${ip[0]}.${ip[1]}.${ip[2]}.$i is up"
else
echo "${ip[0]}.${ip[1]}.${ip[2]}.$i is down"
fi
else
echo "invalid IP or range"
echo "=================================================="
echo "Usage: ./ping_scan.sh <ip[must end in 0]{ex. 192.168.5.0}> "
echo "<start address {ex. 23}> <end address {ex. 254}>"
fi
问题围绕着这段代码sn-p:
if (( $range == 0 && $VIP == 0)); then
echo "initiating ping scan for $1 $first-$last"
echo ""
echo "==================================================="
for i in $(seq $first $last); do ping -c 1 ${ip[0]}.${ip[1]}.${ip[2]}.$i > /dev/null;done
if [ $? -eq 0 ]; then
echo "${ip[0]}.${ip[1]}.${ip[2]}.$i is up"
else
echo "${ip[0]}.${ip[1]}.${ip[2]}.$i is down"
fi
else
echo "invalid IP address or range"
echo "=================================================="
echo "Usage: ./ping_scan.sh <ip[must end in 0]{ex. 192.168.5.0}> "
echo "<start address {ex. 23}> <end address {ex. 254}>"
fi
我使用set -x 来证实我的怀疑。我遇到的问题是我只接收来自被 ping 的最后一个 IP 地址的输出。
for 循环正在为每个 IP 地址运行,完成,获得 $? ping 的最后一个 IP 地址,然后脚本进入if 语句并打印最终 IP 地址的状态。
我需要为每个 IP 地址运行 for 循环,并为每个 IP 地址运行 if 语句并输出每个 IP 地址的状态。我知道这是可以做到的,并且我尝试了多种配置,但似乎都没有。
我该如何解决?
【问题讨论】:
-
您必须移动
done。if只有在您完成整个for循环后才会被触发。适当的缩进也会有所帮助。 -
谢谢,又一个菜鸟错误。我很感激你的回应。我认为当我发布代码时会出现缩进问题。我仍在尝试找出堆栈溢出的代码块。
-
您可以从编辑器中按原样复制粘贴所有内容,然后选择整个代码块并使用 Ctrl-K(或
{}按钮)。 -
太棒了。从现在开始我会这样做。我确实检查了压痕,你是对的,有一些错误。
-
在未来,顺便说一句,请尝试遵循*.com/help/mcve 的指导方针——创建尽可能小的代码示例以重现您的问题。
标签: bash if-statement for-loop nested-loops