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, $a
e $b
sã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 REPLY
variável.) E se você tivesse definido a
algo (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