BusyBox ash 中的数字比较

Wag*_*ags 5 shell-script busybox ash

我有以下脚本从基于我的系统上的EXIF命令中提取数据busybox ash。我从文件末尾解析日期标签,并case用作最终检查以确保格式正确。我的问题是最后的if语句似乎总是返回 true; d="$e - Jebby (exif"总是运行。如果 Iecho $en并且echo $dn它显示$en大于$dn但该if语句仍然运行d="$e - Jebby (exif".

x=<valid filename>
e=$(exif -d -m -t 0x9003 -- "$x" 2>/dev/null)
let l=${#e}-18
e=$(expr substr "$e" $l 19)
e="${e%[ ][0-2][0-9][:][0-6][0-9][:][0-6][0-9]*}" 
e="${e##*[!1-2][!09][!0-9][!0-9][!:][!0-1][!0-9][!:][!0-3][!0-9]}"
e=$(expr substr "$e" 1 4)$(expr substr "$e" 6 2)$(expr substr "$e" 9 2)
case "$e" in 
   [1-2][09][0-9][0-9][0-1][0-9][0-3][0-9])
     let en=$e+3
     ds="${d% - Jebby (}"
     let dn=$ds
     if [ $en -lt $dn ]; then
        d="$e - Jebby (exif"
     fi
esac
Run Code Online (Sandbox Code Playgroud)

mic*_*has 2

对我来说,灰烬的比较效果很好:

./busybox ash
$ [ 1 -lt 2 ] && echo true || echo false
false
$ [ 3 -lt 2 ] && echo true || echo false
true
$ a=1 b=2 c=3
$ [ $a -lt $b ] && echo true || echo false
true
$ [ $c -lt $b ] && echo true || echo false
false
$ 
Run Code Online (Sandbox Code Playgroud)

你的变量的内容到底是什么?你知道-lt比较数字吗?

您也可以这样做set -x看看发生了什么。