if
должен сопровождаться командой; он проверяет, успешно ли завершена команда или нет.
Вы можете использовать команду test
или эквивалентную команду [
, или Ksh предопределённые [[
:
if test "$1" = Y
или
if [ "$1" = Y ]
или
if [[ $1 == Y ]]
Приведенные выше команды успеха, если условие, указанное его аргументами правда. man test
должен предоставить вам список допустимых условий. Не забудьте указать ваши переменные для команд test
и [
; если нет, неопределенные переменные не будут заменены ничем (т. е. будут удалены), которые обычно представляют собой отчет об ошибке.
Если вам не нужна строгая совместимость с Posix, используйте ksh
встроенный [[
, который также доступен в bash
. Это более удобно, потому что он не разбивает слово на свои аргументы, поэтому переменные расширения не нужно указывать. Обратите внимание, что с [[
правая часть сравнения ==
представляет собой шаблон («глобус»), если он не указан, поэтому вам понадобятся кавычки с правой стороны, если вам нужна буквальная проверка равенства.
ksh имеет встроенную тестовую команду с именем '[[' - если вы ее используете, вы должны передать ']]' в качестве последнего аргумента. В двойных скобках '=' и '==' фактически являются операторами сопоставления шаблонов, поэтому вы можете проверить, начинается ли слово * с * "Y": 'if [[$ 1 == Y *]]; затем'. Котировки вокруг переменных строго не требуются в двойных скобках, потому что «Разделение поля и генерация имени файла не выполняются над словами между [[и]]» - ref ksh (1) man page –
@glennjackman: хорошая точка, я был пытаясь быть слишком общим. Я отредактирую. – rici
@glennjackman Должен быть вопрос с этим вопросом. Я знаю, что я часто отвечал на варианты. – rici