Вы должны быть осторожны с пробелами в ваших командах.
if [ 1 = 1 ]; then echo Ok ; fi
^ ^ ^ ^
Все четыре из этих пробелов необходимы.
Если вы хотите прочитать один символ и проверить его:
read -n1 input
if [ $input = "y" ] ; then echo Got a Yes ; fi
Когда вы пишете if something ; then ...
, оболочка выполняет something
и затем действует в зависимости от кода возврата этой команды.
[
это не «синтаксис», это программа (или встроенная оболочка), которая также называется test
.
Итак:
if [ $a = $b ] ; then ...
фактически запускает исполняемый (или встроенный) [
с аргументами $a
, =
, $b
и ]
.
Если вы не ставите скобки, вам нужно, чтобы между if
и ;
была обычная исполняемая команда, которая возвращает 0 в случае успеха.