Составные команды
Составными называют следующие команды:
(список)
Список выполняется в порожденном командном интерпретаторе. Присваивания переменным и встроенные команды, влияющие на среду командного интерпретатора, не действуют после завершения команды. Статусом возврата является статус выхода списка.
{ список; }
Список просто выполняется в среде текущего командного интерпретатора. Список должен завершаться переводом строки или точкой с запятой. Эту команду называют командой группировки. Статусом возврата является статус выхода списка.
((выражение))
Выражение вычисляется в соответствии с правилами, описанными ниже в разделе "". Если выражение
имеет ненулевое значение, статус возврата равен 0; в противном случае - 1. Эта конструкция эквивалентна конструкции let "выражение".
[[ выражение ]]
Возвращает статус 0 или 1 в зависимости от значения указанного условного выражения. Выражения состоят из компонентов, описанных ниже в разделе "". Деление слов и подстановка имен файлов в словах между [[ и ]] не выполняется; выполняется замена тильды, подстановка значений параметров и переменных, арифметическая подстановка, подстановка результатов команд и подстановка процессов, а также удаление кавычек.
При использовании операторов == и != строка справа оператора считается образцом и сопоставляется по правилам, описанным ниже в подразделе "". Возвращается значение 0 если строка, соответственно, сопоставляется и не сопоставляется с образцом, и 1 в противном случае. Любая часть образца может быть взята в кавычки, чтобы сопоставление с ней шло буквально.
Выражения можно комбинировать с помощью следующих операторов, перечисленных в порядке снижения приоритета:
( выражение )
Возвращает значение выражения. Круглые скобки можно использовать для изменения обычного приоритета операторов.
! выражение
Истинно, если выражение ложно.
выражение1 && выражение2
Истинно, если истинны оба выражения, выражение1 и выражение2.
выражение1 выражение2
Истинно, если истинно выражение1 или выражение2.
Операторы && и не вычисляют выражение2, если значения выражения1 достаточно для определения возвращаемого значения всего условного выражения.
for имя [ in список_слов ] ; do список ; done
Выполняются подстановки в списке_слов после in, в результате чего получается список элементов. Переменная с соответствующим именем последовательно получает значение каждого элемента этого списка, и каждый раз выполняется список. Если слово in не указано, команда for выполняет список для каждого установленного позиционного параметра (см. раздел "" ниже). Сатусом возврата является статус выхода последней выполненной команды. Если в результате подстановок элементов списка_слов после in получается пустой список, команды не выполняются и возвращается статус 0.
select имя [ in список_слов ] ; do список ; done
Выполняются подстановки в списке_слов после in, в результате чего получается список элементов. Набор полученных после подстановки слов выдается в стандартный поток ошибок, причем перед каждым элементом выдается его порядковый номер. Если слово in не указано, выдаются установленные позиционные параметры (см. раздел "" ниже). Затем выдается приглашение PS3
и читается строка со стандартного входного потока. Если эта строка содержит число, соответствующее одному из выданных слов, то переменная имя получает его значение. Если строка пустая, слова и приглашение выдаются снова. Если прочитан символ конца файла (EOF), команда заврешается. При вводе любого другого значения переменная имя
получает пустое значение. Прочитанная строка сохраняется в переменной REPLY. Список выполняется после каждого выбора, пока не будет выполнена команда break или return. Статусом выхода команды select является статус выхода последней команды в списке, или 0, если ни одна команда не была выполнена.
case слово in [ ( образец [ | образец ] ... ) список ;; ] ... esac
Команда case сначала подставляет значение слова и пытается его сопоставить поочередно с каждым образцом, используя те же правила сопоставления, что и для имен файлов (см. подраздел "Подстановка имен файлов"). Если найден сопоставляющийся образец, выполняется соответствующий список. После нахождения первого сопоставления дальнейшее сопоставление не выполняется и команда завершается. Статус выхода равен 0, если ни один образец не сопоставился. В противном случае, он равен статусу выхода последней выполненной команды из соответствующего списка.
if список; then список; [ elif список; then список; ] ... [ else список; ] fi
Выполняется список после if. Если его статус выхода - 0, выполняется список после then. В противном случае, выполняется последовательно список в очередной конструкции elif, и если его статус выхода - 0, выполняется соответствующий список после then
и команда завершается. Если все конструкции elif проверены и ни один из списков не вернул статус 0, выполняется список после else, если эта конструкция задана. Статусом выхода является статус выхода последней выполненной команды или 0, если ни одно из условий не оказалось истинным.
while список; do список; done
until список; do список; done
Команда while циклически выполняет список после do, пока последняя команда списка возвращает статус выхода 0. Команда until идентична команде while, но условие завершения - противоположно; список после do выполняется, пока последняя команда списка возвращает ненулевой статус выхода. Статусом выхода команд while и until является статус выхода последней выполненной команды списка или 0, если ни одна команда не выполнена.
[ function ] имя () { список; }
Эта команда определяет функцию с указанным именем. Тело функции образует список команд между фигурными скобками { и }. Этот список выполняется каждый раз, когда имя функции указывается как имя простой команлы. Статусом выхода функции является статус выхода последней команды, выполненной в теле функции. (См. раздел "" ниже.)