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