Exceção durante a execução do script sh simples

0

Abaixo está o script simples, enquanto executando o script eu estou recebendo a exceção como linha 10: erro de sintaxe: fim de arquivo inesperado. por favor ajude.

#!/bin/sh
a=10
b=20
if [ 10 == 20 ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi
    
por Abhishek Gowlikar 10.05.2018 / 09:01

2 respostas

3

altere == para -eq :

#!/bin/sh
a=10
b=20
if [ 10 -eq 20 ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi

BTW: Você definiu as variáveis a e b, mas não as está usando. Eu suponho que você pretendia:

#!/bin/sh
a=10
b=20
if [ $a -eq $b ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi

Veja man test para a aparência da expressão [ ] . = é para comparações de strings, -eq , -gt , etc. são para comparações de números inteiros.

    
por muclux 10.05.2018 / 09:14
2

Primeiro, acredito que [ 10 == 20 ] é um erro de digitação e deve ser [ "$a" == "$b" ] . O segundo @ dsstorefile1 está correto No POSIX sh, == não é suportado.

Se você usa shellcheck , saiba por si mesmo:

$ shellcheck script.sh 

In script.sh line 4:
if [ "$a" == "$b" ]
          ^-- SC2039: In POSIX sh, == is not supported.

Aqui está uma versão avançada do seu script que pode lidar com os dois primeiros parâmetros posicionais:

#!/bin/sh
a="$1"
b="$2"
if [ "$a" = "$b" ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi

Então você pode usá-lo desta maneira:

$ ./script.sh 10 20
a is not equal to b

$ ./script.sh 10 10
a is equal to b
    
por pa4080 10.05.2018 / 09:17