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, $a
y $b
son 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 REPLY
variable). Y si lo hubiera configurado a
en 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