Bash脚本执行无响应问题:按指定表名输出对应标识
Bash脚本匹配文件内容无输出问题排查与修复
问题描述
编写的Bash脚本预期匹配schmaneg.sch文件中的4cn.tbl时输出Sch Name : qmb00l,匹配4cn1.tbl时输出Sch Name : qmb00l45,但执行后终端无任何响应。
原脚本内容:
cd /home/fj/vanessa/Desktop sch="$(echo -n " Sch Name : "; grep -o '4cn.tbl\|4cn1.tbl' schmaneg.sch)" if [ "$sch" = 4cn.tbl ]; then sch = "qmb00l" echo $sch fi if [ "$sch" = 4cn1.tbl ]; then sch = "qmb00l45" echo $sch fi
schmaneg.sch文件内容:
blah 4cn.tbl bleh
错误分析
- 变量赋值语法错误:Bash中变量赋值时,
=两边不能有空格,比如sch = "qmb00l"会被解析为执行sch命令并传入=和"qmb00l"作为参数,属于无效命令,直接导致脚本异常。 - 变量初始值不符合判断逻辑:初始赋值时把输出前缀
Sch Name :和grep结果拼接在一起,导致sch的值是Sch Name : 4cn.tbl,而后续判断是和纯字符串4cn.tbl比较,条件永远不成立,自然不会执行echo语句。 - 字符串比较缺乏引号包裹:判断条件中的
4cn.tbl未加引号,虽当前场景无特殊字符,但不符合Bash编程规范,复杂场景下易引发错误。
修正后的脚本
cd /home/fj/vanessa/Desktop # 仅获取grep匹配的结果,不提前拼接前缀 match_result=$(grep -o '4cn.tbl\|4cn1.tbl' schmaneg.sch) if [ "$match_result" = "4cn.tbl" ]; then sch="qmb00l" elif [ "$match_result" = "4cn1.tbl" ]; then sch="qmb00l45" fi # 统一输出指定格式内容 if [ -n "$sch" ]; then echo "Sch Name : $sch" fi
说明
- 单独获取grep的匹配结果,避免提前拼接前缀导致判断逻辑失效。
- 修正变量赋值的空格问题,确保语法正确。
- 使用
elif简化多条件判断,提升脚本可读性。 - 最后统一输出符合要求的格式内容,确保输出样式正确。
执行修正后的脚本,结合提供的schmaneg.sch内容,会输出:
Sch Name : qmb00l
内容的提问来源于stack exchange,提问作者vane0121.vb
相关产品推荐
相关产品推荐

