error de sintaxis en expresión condicional

error de sintaxis en expresión condicional

Estoy escribiendo un script en el que uso la combinación de declaración lógica 'O' y 'Y' lógica. Este es el guión:

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

y obteniendo el siguiente error al ejecutarlo:

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

Estoy usando bash shell. Cualquier ayuda con esto es realmente apreciada.

Respuesta1

No has coincidido [[con ]. [[siempre debe cerrarse con ]]y [con ]. Usar:

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

Mejor aún, ya que estás usando [[de todos modos:

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

El otro error, que no noté hasta que se aplicó el formato, es que estás haciendo:

read $a
read $b

Deberías estar haciendo:

read a
read b

Con el primer formulario, $ay $bson reemplazados por el shell con su contenido, por lo que si no los hubieras configurado antes de esta línea, el comando final sería:

read

(en cuyo caso el valor leído se almacenaría en la REPLYvariable). Y si lo hubiera configurado aen algo (como a="blah blah"), se vería así:

read blah blah

Respuesta2

En lugar de:

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

Yo usaría:

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

información relacionada