В языке командного интерпретатора существует три типа циклов: while, until и for.
Цикл while:
while список_команд1; do
список_команд2
done
В условии учитывается код возврата последней выполненной команды из списка_команд1,при этом 0 интерпретируется как «истина».
Цикл until:
until список_команд1; do
список_команд2{;|перевод строки}
done
Проверка условия выполняется перед выполнением цикла. Учитывается код возврата последней выполненной команды из списка_команд1,при этом цикл выполняется до тех пор, пока код возврата не примет значение «истина», т. е. будет равным нулю.
Цикл for:
for переменная [in список_значений]; do
список_команд
done
Переменной присваивается значение очередного слова из списка_значений, и для этого значения выполняется список_команд. Количество итераций равно количеству цепочек символов в списке_значений, разделённых пробелами. Если ключевое слово in и список_значений опущены как необязательные, то переменной поочередно присваиваются значения параметров, переданных при запуске программы-скрипта. В качестве передаваемых параметров можно использовать шаблоны имён файлов, тогда интерпретатор превращает эти шаблоны в требуемый синтаксисом список имён файлов, удовлетворяющих шаблону.
|
|
Например,
$ A=1; for i in `ls /bin | grep '^b'`; do
> echo "$A:$i"
> A=`expr $A + 1`
> done
1:basename
2:bash
3:bash2
4:bunzip2
5:bzcat
6:bzip2
7:bzip2recover
Здесь мы получили список файлов из /bin (ls /bin), отфильтровали из него файлы, начинающиеся на b (ls /bin | grep '^b'), и передали полученный список в качестве параметра оператору цикла for. В самом цикле мы вывели текущее значение переменной цикла и номер записи.