синтаксическая ошибка в условном выражении

синтаксическая ошибка в условном выражении

Я пишу сценарий, в котором я использую комбинацию логического 'ИЛИ' и логического 'И' оператора. Вот сценарий:

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

и получаю следующую ошибку при выполнении:

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

Я использую оболочку bash. Любая помощь по этому вопросу будет оценена по достоинству.

решение1

Вы не сопоставили [[с ]. [[всегда следует закрывать с ]]и [с ]. Используйте:

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

А еще лучше, поскольку вы в любом случае используете [[:

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

Другая ошибка, которую я не заметил, пока не было применено форматирование, заключается в том, что вы делаете:

read $a
read $b

Вам следует сделать следующее:

read a
read b

В первой форме $aи $bзаменяются оболочкой с их содержимым, поэтому, если вы не установили их перед этой строкой, окончательная команда будет такой:

read

(в этом случае считанное значение будет сохранено в REPLYпеременной.) А если бы вы установили aчто-то (например a="blah blah", ), это выглядело бы так:

read blah blah

решение2

Вместо:

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

Я хотел бы использовать:

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

Связанный контент