执行bash脚本比较数值大小时提示语法错误,求代码问题排查
Bash脚本比较逻辑报错排查与修复
核心问题定位
- 语法混用错误:
((...))是bash的算术扩展语法,仅支持算术比较符(</==/>),你代码中使用的-lt/-eq是test命令(对应[ ]判断结构)的专用比较运算符,二者混用直接触发语法错误。 - 变量带多余空白:报错信息中显示
2后有多余空格,说明你通过read读取到的变量值末尾携带空白字符,代入表达式后会被识别为非法token。 - shebang格式错误:原代码第一行
#! /bin/bash前有多余空格,shebang必须顶格写才能被系统正确识别为bash脚本。
修复后代码
写法1:使用算术扩展((...))(推荐)
#!/bin/bash # -r参数避免读取时转义反斜杠 read -r x read -r y # 移除变量中所有空白字符,避免输入带空格导致报错 x=${x// /} y=${y// /} if (( x < y )) then echo "X is less than Y" elif (( x == y )) then echo "X is equal to Y" else echo "X is greater than Y" fi
写法2:使用test结构兼容-lt类运算符
#!/bin/bash read -r x read -r y x=${x// /} y=${y// /} if [ "$x" -lt "$y" ] then echo "X is less than Y" elif [ "$x" -eq "$y" ] then echo "X is equal to Y" else echo "X is greater than Y" fi
内容的提问来源于stack exchange,提问作者vatsal mangukiya
相关产品推荐
相关产品推荐

