如何实现运行变量字符串匹配grep搜索及黑名单跳过逻辑?
问题分析与修复方案
看得出来你想实现的核心逻辑是:当wget.log里能找到tar.gz,且目标URL不在黑名单文件banned里时,输出成功提示,否则跳过执行。但原脚本的条件判断部分有明显的语法错误,导致黑名单匹配逻辑完全失效,我来帮你修正并解释清楚。
原脚本的核心问题
- 错误用管道符
|连接两个grep操作:管道是用来传递命令输出的,不能用来做逻辑判断 "$var1" -ne grep -q "https://somewebsite.com/$line1" banned这部分完全不符合Shell语法,-ne是test命令的数值比较符,不能直接这么搭配使用- 逻辑条件的组合顺序和表达方式错误,导致黑名单判断完全不生效
修正后的完整脚本
var1=https://somewebsite.com/directory line1=directory sudo wget -O wget.log https://somewebsite.com/$line1/releases # 逻辑:日志中存在tar.gz,且黑名单中没有目标URL → 执行成功分支 if grep -q "tar.gz" wget.log && ! grep -q "https://somewebsite.com/$line1" banned; then echo "Good Job!" else echo "Skip!" fi
关键修改点说明
- 逻辑运算符替换:用
&&表示“同时满足两个条件”,用!对黑名单的匹配结果取反——也就是确认黑名单里没有找到目标URL - 清理无效语法:删掉了完全不符合规则的
"$var1" -ne部分,这部分是导致逻辑崩溃的核心原因 - 明确条件优先级:先判断日志里的
tar.gz存在,再判断黑名单不匹配,逻辑链条更清晰
额外优化建议
- 如果
banned文件里的URL格式可能有细微差异(比如带/不带结尾斜杠),可以用grep -F做固定字符串匹配,避免正则表达式干扰,写成! grep -qF "https://somewebsite.com/$line1" banned - 要是需要忽略大小写匹配,可给
grep加-i选项,根据你的实际需求调整
内容的提问来源于stack exchange,提问作者J V
相关产品推荐
相关产品推荐

