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

Bash脚本执行报错expr: unexpected argument,求语法问题排查

排查并修复Docker Desktop RAM检查脚本的语法错误

问题分析

你的脚本存在三个关键语法问题,直接导致了expr: syntax error和变量不替换的异常:

  • 内存数值提取错误:grep MemTotal /proc/meminfo返回的是整行文本(例如MemTotal: 32489356 kB),直接传给expr做除法时,非数字内容会触发语法错误。
  • if条件判断语法错误:Bash中不能用($RAM_GB > 4)的写法,()会将内容当作命令执行,且>是重定向符号,数值比较需用-gt(greater than)运算符,判断结构要用[ ]或[[ ]]。
  • 变量替换失效:单引号包裹的字符串中变量不会被解析,导致输出$RAM_GB而非实际内存数值。

修正后的脚本

#!/bin/bash
CURRENT_TIME="$(date +"%x %r %Z")"
TIMESTAMP="Generated $CURRENT_TIME, by $USER"
echo "$TIMESTAMP"

check_ram () {
  # 提取MemTotal行的纯数字部分(单位KB)
  RAM_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
  # 计算GB值(1GiB=1048576KB,若需十进制GB可换回1000000)
  RAM_GB=$(expr $RAM_KB / 1048576)

  if [ $RAM_GB -gt 4 ]; then
    echo "Your System RAM is: $RAM_GB GB and that meets the minimum requirements for Docker Desktop."
  else
    echo "Your computer does not meet the minimum RAM requirements."
    exit 0
  fi
}

# 调用检查函数
check_ram

关键修改说明

  1. 提取纯数字内存值:用awk '{print $2}'从MemTotal行中提取第二列的数字,确保RAM_KB是纯数值,避免expr报错。
  2. 修正if条件逻辑:用[ $RAM_GB -gt 4 ]做数值大于判断,符合Bash语法规范;若需更灵活的判断也可使用[[ $RAM_GB -gt 4 ]]。
  3. 修复变量输出:将echo的单引号改为双引号,确保$RAM_GB被解析为实际内存数值。
  4. 准确单位换算:将1000000改为1048576(符合二进制内存单位换算),若需十进制GB可换回原数值。
  5. 添加函数调用:原脚本仅定义了check_ram函数未执行,添加check_ram触发检查逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:10:25