Estações de trabalho on-line OnWorks Linux e Windows

Logotipo

Hospedagem online grátis para estações de trabalho

<Anterior | Conteúdo | Próxima>

Expansões imprevistas

É possível que haja erros que ocorrem apenas de forma intermitente em um script. Às vezes, o script será executado bem e outras vezes falhará devido aos resultados de uma expansão. Se retornarmos nosso ponto-e-vírgula ausente e alterarmos o valor de número para uma variável vazia, nós


pode demonstrar:



#! / Bin / bash


# problema: script para demonstrar erros comuns


numero =


se [$ número = 1]; então

echo "O número é igual a 1." outro

echo "O número não é igual a 1."

fi

#! / Bin / bash


# problema: script para demonstrar erros comuns


numero =


se [$ número = 1]; então

echo "O número é igual a 1." outro

echo "O número não é igual a 1."

fi


Executar o script com essa mudança resulta na saída:



[me @ linuxbox ~] $ problema

/ home / me / bin / trouble: line 7: [: =: operador unário esperado O número não é igual a 1.

[me @ linuxbox ~] $ problema

/ home / me / bin / trouble: line 7: [: =: operador unário esperado O número não é igual a 1.


Recebemos esta mensagem de erro bastante enigmática, seguida pela saída do segundo eco comando. O problema é a expansão do número variável dentro do teste comando. Quando o comando:



[$ número = 1]

[$ número = 1]


sofre expansão com número estando vazio, o resultado é este:


[= 1]

[= 1]


que é inválido e o erro é gerado. o = operador é um operador binário (requer um valor em cada lado), mas o primeiro valor está faltando, então o teste comando espera um operador unário (como -z) em vez de. Além disso, uma vez que o teste falhou (por causa do erro), o if comando recebe um código de saída diferente de zero e age de acordo, e o segundo eco comando é executado.

Este problema pode ser corrigido adicionando-se aspas ao redor do primeiro argumento no teste

comando:


["$ number" = 1]

["$ number" = 1]


Então, quando ocorrer a expansão, o resultado será este:



["" = 1]

["" = 1]


que produz o número correto de argumentos. Além de strings vazias, as aspas devem ser usadas nos casos em que um valor pode se expandir em strings com várias palavras, como no caso de nomes de arquivos que contêm espaços incorporados.


Top OS Cloud Computing na OnWorks: