You need to enable JavaScript to run this app. Bash移动文件报integer expression expected错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Bash移动文件报integer expression expected错误如何解决

报错原因

  • Bash 原生的数值比较运算符(-gt/-lt/-eq等)仅支持整数类型对比,你脚本中需要对比的分辨率、阈值3.00都是浮点数,不符合整数要求,因此触发报错。
  • 原脚本还存在潜在风险:用ls *.ent遍历文件容易因文件名含特殊字符(空格、换行等)出错;未处理分辨率提取为空的边界场景,会导致后续比较逻辑异常。

可行解决方案

用支持浮点数比较的工具(如bc)替换原生bash比较逻辑,同时优化遍历和提取流程,修复后的脚本如下:

#!/bin/bash
Above3="/mnt/d/Documents/Research/PhD/PhD/Research/Results/PDB/New/XRD/Above3"
# 先确保目标目录存在,避免移动失败
mkdir -p "$Above3"
# 直接用通配符遍历.ent文件,规避ls的兼容性问题
for f in *.ent; do
    # 提取分辨率,省略多余管道步骤
    resolution=$(awk '/REMARK   2 RESOLUTION\./ {print $4}' "$f" | tr -d ' ')
    # 先判断分辨率是否提取成功,再用bc做浮点数比较
    if [[ -n "$resolution" ]] && echo "$resolution > 3.00" | bc -l | grep -q 1; then
        mv -- "$f" "$Above3"
    fi
done

优化说明

  • 所有变量用双引号包裹,兼容带空格、特殊字符的文件名
  • 增加空值判断,过滤提取不到分辨率的异常文件
  • 用bc -l做浮点数比较:当输入的比较表达式成立时bc输出1,否则输出0,匹配到1时才执行移动操作
  • 增加--参数适配以-开头的文件名,避免mv命令解析错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 22:45:10