erro de sintaxe na expressão condicional

1

Estou escrevendo um script no qual estou usando a combinação da instrução lógica 'OR' e lógica 'AND'. Este é o script:

#!/bin/bash

echo "Enter the value of a"
read $a
echo "Enter the value of b"
read $b
if

[[ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]]; then

echo "Either of the JVMs is not yet up, so lets wait for some more time"

i=$(($i+1))
sleep 1s

fi

e obtendo o seguinte erro ao executá-lo:

line 13: syntax error in conditional expression
line 13: syntax error near ']'
line 13: '[[ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]]; then'

Estou usando o shell bash. Qualquer ajuda sobre isso é muito apreciada.

    
por Sudev Jash 17.11.2014 / 20:05

2 respostas

3

Você não combinou [[ com ] . [[ sempre deve ser fechado com ]] e [ com ] . Use:

if [[ $a != STARTED && $b == STARTED ]] || [[ $b != STARTED && $a == STARTED ]]; then

Melhor ainda, já que você está usando [[ :

if [[ ($a != STARTED && $b == STARTED) || ($b != STARTED && $a == STARTED) ]]; then

O outro erro, que eu não notei até que a formatação foi aplicada, é que você está fazendo:

read $a
read $b

Você deveria estar fazendo:

read a
read b

Com o primeiro formulário, $a e $b são substituídos pelo shell com seu conteúdo, portanto, se você não os tivesse definido antes dessa linha, o comando final seria:

read

(nesse caso, o valor lido seria armazenado na variável REPLY .) E se você tivesse definido a para algo (como a="blah blah" ), seria semelhante a:

read blah blah
    
por 17.11.2014 / 20:08
0

Em vez de:

[[ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]]; then

Eu usaria:

if [ $a != STARTED && $b == STARTED ] || [ $b != STARTED && $a == STARTED ]; then
    
por 17.11.2014 / 20:33