Você não combinou [[ com ] . [[ sempre deve ser fechado com ]] e [ com ] . Use:
if [[ $a != STARTED && $b == STARTED ]] || [[ $b != STARTED && $a == STARTED ]]; then
Melhor ainda, já que você está usando [[ :
if [[ ($a != STARTED && $b == STARTED) || ($b != STARTED && $a == STARTED) ]]; then
O outro erro, que eu não notei até que a formatação foi 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, portanto, se você não os tivesse definido antes dessa linha, o comando final seria:
read
(nesse caso, o valor lido seria armazenado na variável REPLY .) E se você tivesse definido a para algo (como a="blah blah" ), seria semelhante a:
read blah blah