Bash脚本筛选.com域名行并判断第三列ID奇偶性问题排查
原脚本问题说明
原脚本存在4个核心逻辑错误,导致运行结果不符合预期:
- 条件连接符使用错误:用
||(逻辑或)连接邮箱匹配规则和奇偶判断规则,只要满足「第三列为偶数」就会进入偶数分支,完全不需要邮箱符合.com要求。 - 校验顺序错误:没有把「邮箱域名包含.com」作为前置准入条件,所有行不管邮箱是否合规都会进入后续判断流程,不符合要求的行没有被跳过。
- 空值计算异常:第三列ID为空时,
$((rec_column3 % 2))会把空值当做0计算,永远返回偶数结果,这也是所有输出都显示为偶数的直接原因。 - 正则写法不严谨:正则中
.是通配符,可匹配任意单个字符,直接写.com会误匹配xcom、1com这类非.com后缀的字符串。
修正后脚本
input="text.txt" # 转义正则通配符.,严格匹配.com后缀 regex='\.com' while read -r _ rec_column2 rec_column3 do # 前置校验:邮箱不含.com直接跳过当前行 if [[ ! $rec_column2 =~ $regex ]]; then continue fi # 邮箱合规但ID为空的行直接跳过 if [[ -z "$rec_column3" ]]; then continue fi # 对合规行判断ID奇偶并输出 if [[ $((rec_column3 % 2)) -eq 0 ]]; then echo "$rec_column3 IS valid and even" else echo "$rec_column3 IS valid and odd" fi done < "$input"
运行结果
针对提供的text.txt文件,运行脚本后输出如下:
311 IS valid and odd 333 IS valid and odd
结果符合规则要求:
- neco行无有效.com邮箱、boter行邮箱域名是nginx不含.com,均被直接跳过
- nicol行邮箱合规但无第三列ID,被跳过
- 剩余两行ID均为奇数,输出对应判断结果
内容的提问来源于stack exchange,提问作者ask stack
相关产品推荐
相关产品推荐

