Какой правильный формат для if then?
Я пробовал много вариантов.
Должен ли формат работать в командной строке, когда он не в программе?
$ if [1==2] then echo "y" fi;
> ;
-bash: syntax error near unexpected token `;'
решение1
Никто пока не объяснил ошибку.
Вы вошли:
if [1==2] then echo "y" fi;
;
Первая строка имела абсолютно допустимый синтаксис с точки зрения оболочки. Она имела вид:
if cmd args
В этом случае cmd
является производным от расширения glob [1==2]
. [1==2]
— это шаблон глобализации, который расширяется до списка файлов в текущем каталоге, имена которых состоят из символа 1
, =
или 2
.
2
Например, если в текущем каталоге есть файл , то это будет выглядеть так:
если 2, то эхо fi;
То есть выполнить 2
команду с 4 аргументами: 2
, then
, echo
и fi
, как первую команду в if
части оператора if/then/elif/else/fi
.
Ошибка возникает из-за этого второго ;
во второй строке. Вы бы получили то же самое сообщение об ошибке, введя его ;
в командной строке. ;
необходимо использовать для разделения команд, его нельзя использовать отдельно.
решение2
Правильная форма конструкции bash if
:
if something; then command; fi
Правильная форма того, что вы, кажется, пытаетесь сделать, это
if [ 2 -eq 2 ]; then echo "y"; fi;
Пробелы важны в bash.
решение3
Попробуй это:
if [ 1 == 2 ]; then echo "y" ; fi
И лучше использовать -eq
, если вы не хотите сравнивать 1 и 2 как строки.
Полезная ссылка:http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html
решение4
Оператора ==
нет в Bash. Он есть либо -eq
при сравнении чисел, либо =
при сравнении строк.
if [ 1 -eq 2 ]; then echo 'y'; fi