You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写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 + ),因此触发多次语法错误。

  • 修复方案

    1. 执行脚本时必须传入3个数字参数,示例:
      com2 5 10 15
      
    2. 可选:在脚本开头添加参数校验,避免无参数运行报错:
      if [ $# -ne 3 ]; then
          echo "用法错误:请传入3个数字参数,格式为 com2 数字1 数字2 数字3"
          exit 1
      fi
      
    3. 优化冗余代码:expr $3完全没必要,直接用a=$3即可,减少不必要的expr调用。

内容的提问来源于stack exchange,提问作者Korostev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 07:15:57