Comparações de números na cinza BusyBox [closed]

4

Eu tenho o seguinte script que extrai dados do comando EXIF no meu sistema busybox ash -based. Eu analiso a tag date do final do arquivo e uso case como uma verificação final para garantir que o formato esteja correto. Meu problema é que a instrução if no final sempre parece retornar true; , por exemplo, d="$e - Jebby (exif" sempre é executado. Se eu echo $en e echo $dn mostrar $ en maior que $ dn , mas a instrução if ainda executar o 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
    
por Wags 19.01.2014 / 16:07

1 resposta

1

Para mim, a comparação em cinzas funciona bem:

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

Qual é exatamente o conteúdo de suas variáveis? Você está ciente de que -lt se compara numericamente?

Você também pode fazer set -x para ver o que está acontecendo.

    
por 03.12.2016 / 11:06