思路:先用 grep 正则判断是否为四段号码,不是直接输出error;再用 awk 存为数组,分别判断每段是否≤255,是则输出yes,否则输出no

#!/bin/bash
text=$(cat nowcoder.txt)
for i in $text; do
	if echo "$i" | grep -Eq '([0-9]{1,3}\.){3}[0-9]{1,3}'; then
		arrIP=($(echo "$i" | awk -F. '{print$1,$2,$3,$4}'))
		if [ ${arrIP[0]} -le 255 ] && \
			[ ${arrIP[1]} -le 255 ] && \
			[ ${arrIP[2]} -le 255 ] && \
			[ ${arrIP[3]} -le 255 ] 
		then
			echo "yes"
		else
			echo "no"
		fi
	else
		echo "error"
	fi
done