4
我想学习一些shell脚本,但我认为它将是一种很好的方式将它与我的ccna研究结合起来。所以我写了一个简单的脚本,它可以根据用户提供的IP地址和子网掩码扫描一些网络设备。要确定主机所属的网络,我使用以下几行代码,但它一直让我错误。从IP地址和子网掩码获取网络ID
read -p "Geef een IP-adres op " i
read -p "Geef een subnetmask op " s
IFS=. read -r i1 i2 i3 i4 <<< $i
IFS=. read -r m1 m2 m3 m4 <<< $s
ip=`printf "%d.%d.%d.%d\n" $i1 $i2 $i3 $i4`
mask=`printf "%d.%d.%d.%d\n" $m1 $m2 $m3 $m4`
#bepaal netwerk id
id=`printf "%d.%d.%d.%d\n" "$((i1 & m1))" "$((i2 & m2))" "$((i3 & m3))" "$((i4 & m4))"`
的错误是产生如下:
192 168 178 15 & 0xff 0xff 0xff 0x00: syntax error in expression (error token is "168 178 15 & 0xff 0xff 0xff 0x00")
这里有人能告诉我为什么吗?
因为IFS是“。”对于整个脚本,所以$ i被读作:号码号码号码,但<<<只会得到第一个号码。如果将其用引号引起来,shell解析器会停止查找$ IFS字符,直到引号结束为止......总是先做好存储OLDIFS然后再恢复IFS的良好做法 – technosaurus
Thx!像魅力一样工作! – Martijn