Я пишу сценарий, в котором я использую комбинацию логического 'ИЛИ' и логического 'И' оператора. Вот сценарий:
#!/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