如果文件采用给定的格式(即使用 *),则使用 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