我已經在這個腳本中工作了幾天。首先,我被要求只匹配ip地址,這就是我所做的,現在我被要求將ip地址與子網掩碼(短版本)相匹配。例如,192.168.2.13/21。該腳本可以很好地匹配沒有子網掩碼的IP地址。問題:如何修改此腳本以使IP地址與子網(/ 21)掩碼相匹配,但也會返回與我未提及的其他子網掩碼相同的IP地址。例如,如果我輸入192.168.2.13/21,它也會返回,如果發現192.168.2.13/19和/或192.168.2.13/22等。這就是我所做的。謝謝在文件中查找帶子網掩碼的IP地址
#!/bin/bash
valid_ip(){
local stat=1
ip="$1"
if [[ $ip =~ [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
OIFS=$IFS
IFS='.'
a=($ip)
IFS=$OIFS
[[ ${a[0]} -le 255 && ${a[1]} -le 255 && ${a[2]} -le 255 && ${a[3]} -le 255 ]]
stat=$?
fi
return $stat
}
red='\e[0;31m'
nc='\e[0m'
blue='\e[0;34m'
yellow='\e[1;33m'
echo -e "${red}Type 0 to quit${nc}"
while true; do
echo -e "${yellow}Enter an IP address: ${nc}\c"
read ip
if [ $ip == 0 ]; then
echo "Good Bye!!"
break;
elif valid_ip $ip; then
if egrep $ip ips; then
echo $ip >> advertised
echo $ip "is been advertised"
else
echo $ip >> Notadvertised
echo $ip "is not been adversited"
fi
else
echo "Not valid. Please re-enter IP address"
fi
done
爲什麼不使用ipcalc來驗證IP地址?它位於initscripts包中,您可能已安裝它。然後你可以grep for'$ {ip}/{,1}'而不管掩碼和'/'是否可選。 – alvits