web-dev-qa-db-ja.com

BusyBoxashの数の比較

busybox ashベースのシステムの[〜#〜] exif [〜#〜]コマンドからデータを抽出する次のスクリプトがあります。ファイルの最後からdateタグを解析し、形式が正しいことを確認するための最終チェックとしてcaseを使用します。私の問題は、最後のifステートメントが常にtrueを返すように見えることです。 つまりd="$e - Jebby (exif"は常に実行されます。 echo $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
4
Wags

私にとって、灰の比較はうまくいきます:

./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
$ 

あなたの変数の内容は正確には何ですか?あなたは-lt数値的に比較しますか?

set -x何が起こっているかを確認します。

1
michas