编写Shell脚本使用expr执行表达式时遭遇语法错误求助
expr语法错误排查问题
操作步骤
lidarachynska@MacBook-Air-Lida ~ % cd rachynska lidarachynska@MacBook-Air-Lida rachynska % vim bin/com2 lidarachynska@MacBook-Air-Lida rachynska % chmod a+x bin/com2 lidarachynska@MacBook-Air-Lida rachynska % PATH=$PATH:~/rachynska/bin lidarachynska@MacBook-Air-Lida rachynska % com2 expr: syntax error expr: syntax error expr: syntax error expr: syntax error expr: syntax error
尝试的两种脚本写法
写法1
a=`expr $3` b=`expr $2 - $1` c=`expr $2 + $1` d=`expr $b \* $c` a=`expr $d / 7` echo $a
写法2
a=$(expr $3) b=$(expr $2 - $1) c=$(expr $2 + $1) d=$(expr $b \* $c) a=$(expr $d / 7) echo $a
错误原因与解决办法
核心问题:无参数传入导致变量为空
执行com2时未传递任何参数,$1、$2、$3均为空值。expr无法处理空变量组成的无效表达式(比如expr -、expr +),因此触发多次语法错误。修复方案
- 执行脚本时必须传入3个数字参数,示例:
com2 5 10 15 - 可选:在脚本开头添加参数校验,避免无参数运行报错:
if [ $# -ne 3 ]; then echo "用法错误:请传入3个数字参数,格式为 com2 数字1 数字2 数字3" exit 1 fi - 优化冗余代码:
expr $3完全没必要,直接用a=$3即可,减少不必要的expr调用。
- 执行脚本时必须传入3个数字参数,示例:
内容的提问来源于stack exchange,提问作者Korostev
相关产品推荐
相关产品推荐

