Если файл в заданном формате (т. Е. С использованием *), будет достаточно легко использовать сопоставление с шаблоном bash, чтобы сравнить его с IP-адресом.Однако, как указал @Mark Drago, этот формат - все, кроме подсетей с октетными границами, поэтому, если вам нужно поддерживать произвольные границы подсетей, вам нужен лучший формат.
Предполагается, что вы используете "1.2. *"формат, это должно работать:
#!/bin/bash
ip="$1"
found_match=false
while read subnet socks_port socks_ip; do
if [[ "$ip" == $subnet ]]; then # this'll do glob-style pattern matching against $subnet
echo "subnet=$subnet, socks_port=$socks_port, socks_ip=$socks_port"
found_match=true
break # assuming you don't want to check for multiple matches
fi
done </path/to/subnet/file
if ! $found_match; then
echo "No match found in subnet file"
fi