erro de sintaxe na expressão condicional

erro de sintaxe na expressão condicional

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

#!/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 recebendo 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.

Responder1

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

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

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

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

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

read $a
read $b

Você deveria estar fazendo:

read a
read b

Com o primeiro formulário, $ae $bsão substituídos pelo shell com seu conteúdo, então se você não os tivesse configurado antes desta linha, o comando final seria:

read

(nesse caso, o valor lido seria armazenado na REPLYvariável.) E se você tivesse definido aalgo (como a="blah blah"), ficaria assim:

read blah blah

Responder2

Em vez de:

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

Eu usaria:

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

informação relacionada