Shell Script if else

2
#!/bin/bash
echo "Int. a number"
read num1
echo "Int. another numer"
read num2
if ["$num1"="$num2"]; then
echo "Equals"
else
echo "Dif"
fi
if["$num1"<0]; then
echo "The number $num1 is negative"
else if ["$num2"<0]; then
echo "The number $num2 is negative"
fi
#

este código não está funcionando, eu tenho algo errado quando vejo se o número é < 0.

obrigado

    
por user34104 30.05.2010 / 03:11

3 respostas

5

Sintaxe incorreta. Por favor, leia a documentação sobre o comando [ ( help [ / help test )

Cada argumento deve ser um argumento próprio, ou seja, você deve usar espaços entre: [ "$num1" == "$num2" ] . A razão pela qual você não vê um erro na primeira verificação é que ele tenta encontrar um comando chamado (com num1 = 3 e num2 = 4) [3==4] , que não existe, portanto a expressão é avaliada como falsa. Na primeira verificação, você escreveu um < , que é um operador de shell para redirecionamento de entrada . Ele tenta abrir o arquivo 4] , que na maioria dos casos não existe.

No entanto, ao comparar números, você deve usar -eq e semelhante, == é para comparação de string: [ 3 == 3.0 ] é falso, [ 3 -eq 3.0 ] é verdadeiro.

    
por 30.05.2010 / 03:26
3

No Bash, você pode fazer comparações numéricas com os operadores familiares se você usar avaliação aritmética:

if ((num1 ==num2 ))

if ((num1<0))    # in this context, < is not evaluated as a redirection operator

else if (( $num2 < 0 ))

Como você pode ver, eu tenho sido bastante livre com o uso de espaços e posso omitir o cifrão se eu quiser. Você deve estar ciente disso, no entanto:

a=    # set to nothing, thus null
if (( a == 0 )); then echo "ok"; fi    # echoes "ok" since a evaluates to 0
if (( $a == 0 )); then echo "ok"; fi    # produces an error even if $a is quoted

As comparações de strings podem ser realizadas com "<" e ">" em vez de "-lt" e "-gt" se você usar colchetes duplos. O requisito para espaços é o mesmo com eles e para colchetes simples.

s="b"
if [[ "$s" > "a" ]]
t=    # null
if [[ $t < "a" ]]    # evaluates to true

Como você pode ver no último exemplo, ao usar colchetes duplos, não é necessário citar variáveis para proteger contra a possibilidade de elas serem nulas ou não definidas, ao contrário do uso de colchetes simples.

    
por 30.05.2010 / 04:50
2

Os operadores que você está usando fazem uma comparação de string. Você deve usar -eq para igualdade de inteiros, -lt para menos que, etc (eles também devem estar rodeados por espaços).

    
por 30.05.2010 / 03:25