se sempre falso com variáveis iguais

1

Primeiramente, recebo informações sobre o tamanho do arquivo com o curl

fileSize=$( curl http://linux.die.net/include/sys/ioctl.h --head | grep Content-Length | awk '{print $2}')

echo $fileSize é 1825

então eu baixei o arquivo e verifiquei o tamanho

downloadedSize=$(wc -c ioctl.h | awk '{print $1}')

echo $downloadedSize é 1825

quero comparar essas variáveis. mas condição sempre falsa

if [[ "$fileSize" == "$downloadedSize" ]]; then
    echo "success"
  else
    echo "fail"
  fi

Eu tentei estes

if [ "$fileSize" == "$downloadedSize" ]; then
if [ $fileSize == $downloadedSize ]; then
if [[ $fileSize == $downloadedSize ]]; then

e -eq em vez de ==

O que está errado?

    
por user4757345 05.02.2016 / 09:08

3 respostas

4

Em exibição:

$ echo "$fileSize" | od -c
0000000   1   8   2   5  \r  \n
0000006
$ echo "$downloadedSize" | od -c
0000000   1   8   2   5  \n
0000005

mostra que no primeiro caso há um retorno de carro anexado ao valor (os cabeçalhos http têm as terminações de linha: CRLF) enquanto a segunda variável está correta. Tira o CR ( \r ) e seu teste funcionará. por exemplo:

fileSize=$( curl http://linux.die.net/include/sys/ioctl.h --head |
   awk '/Content-Length/ {gsub("\r",""); print $2; exit}')
    
por 05.02.2016 / 09:22
0

Como os operandos da condição são numéricos, você deve usar

if [[ $fileSize -eq $downloadedSize ]]; then

Se houver algum espaço no valor da variável, o caso cuidará disso.

    
por 05.02.2016 / 09:39
0

Use [ ou [[ , a sintaxe não é a mesma. Esses não são o mesmo comando. Possível fazer solução usando comandos embutidos, não enorme awk externo. Eu uso grep, mesmo é possível fazer usando o comando case .


filesize=$(curl http://linux.die.net/include/sys/ioctl.h --head | grep Content-Length)
downloadedSize=$(wc -c < ioctl.h )
filesize=${filesize//[^0-9]/}              # rm not numbers 

downloadedSize=${downloadedSize//[^0-9]/} 

answer="not same"
# compare strings
[ "$filesize" = "$downloadedSize" ] && answer="same"
echo "$answer"

    
por 05.02.2016 / 18:01