Управляющая конструкция for (для) организует условный цикл и имеет следующий вид:
for имя переменной [in список значений] do список–команд done где for – служебное слово определяющее тип цикла, do и done – служебные слова, выделяющие тело цикла. Служебные слова пишутся с начала строки. Фрагмент "in список значений" может отсутствовать.
Имя переменной – это переменная оболочки, принимающая по очереди значения из списка при каждом выполнении следующего за служебным словом do списка–команд.
Например, скрипт lsort содержит следующие операторы:
for i in f1 f2 f3 do progsort $i done В этом примере имя "i" играет роль параметра цикла. Это имя можно рассматривать как shell–переменную, которой последовательно присваиваются перечисленные значения (i=f1, i=f2, i=f3), и выполняется в цикле команда "progsort".
Часто используется форма "for i in *", означающая "для всех файлов текущего каталога".
Пусть "progsort" в свою очередь представляется командным файлом:
cat $1 | sort | tee ${1}_sorted т.е. последовательно сортируются указанные файлы, результаты сортировки направляются в файлы f1_sorted, f2_sorted и f3_sorted.
Можно сделать более универсальной скрипт lsort, если не фиксировать перечень файлов в команде, а передавать произвольное их число параметрами:
for i do progsort $i done Здесь отсутствие после "i" служебного слова "in" с перечислением имен говорит о том, что список поступает через параметры команды. Результат предыдущего примера можно получить, набрав:
$ lsort f1 f2 f3