Чтение онлайн

ЖАНРЫ

Искусство программирования на языке сценариев командной оболочки

Купер Мендель

Шрифт:

См. так же Пример 10-12.

Глава 10. Циклы и ветвления

Управление ходом исполнения -- один из ключевых моментов структурной организации сценариев на языке командной оболочки. Циклы и преходы являются теми инструментальными средствами, которые обеспечивают управление порядком исполнения команд.

10.1. Циклы

Цикл– - это блок команд, который исполняется многократно до тех пор, пока не будет выполнено

условие выхода из цикла.

циклы for

for (in)

Это одна из основных разновидностей циклов. И она значительно отличается от аналога в языке C.

for arg in [list] do команда(ы)... done

На каждом проходе цикла, переменная-аргумент цикла arg последовательно, одно за другим, принимает значения из списка list.

for arg in "$var1" "$var2" "$var3" ... "$varN"

# На первом проходе, $arg = $var1

# На втором проходе, $arg = $var2

# На третьем проходе, $arg = $var3

# ...

# На N-ном проходе, $arg = $varN

# Элементы списка заключены в кавычки для того, чтобы предотвратить возможное разбиение их на отдельные аргументы (слова).

Элементы списка могут включать в себя шаблонные символы.

Есл ключевое слово do находится в одной строке со словом for, то после списка аргументов (перед do) необходимо ставить точку с запятой.

for arg in [list] ; do

Пример 10-1. Простой цикл for

#!/bin/bash

# Список планет.

for planet in Меркурий Венера Земля Марс Юпитер Сатурн Уран Нептун Плутон

do

echo $planet

done

echo

# Если 'список аргументов' заключить в кавычки, то он будет восприниматься как единственный аргумент .

for planet in "Меркурий Венера Земля Марс Юпитер Сатурн Уран Нептун Плутон"

do

echo $planet

done

exit 0

Каждый из элементов [списка] может содержать несколько аргументов. Это бывает полезным при обработке групп параметров. В этом случае, для принудительного разбора каждого
из аргументов в списке, необходимо использовать инструкцию set (см. Пример 11-13).

Пример 10-2. Цикл for с двумя параметрами в каждом из элементов списка

#!/bin/bash

# Список планет.

# Имя кажой планеты ассоциировано с расстоянием от планеты до Солнца (млн. миль).

for planet in "Меркурий 36" "Венера 67" "Земля 93" "Марс 142" "Юпитер 483"

do

set -- $planet # Разбиение переменной "planet" на множество аргументов (позиционных параметров).

# Конструкция "--" предохраняет от неожиданностей, если $planet "пуста" или начинается с символа "-".

# Если каждый из аргументов потребуется сохранить, поскольку на следующем проходе они будут "забиты" новыми значениями,

# То можно поместить их в массив,

# original_params=("$@")

echo "$1 в $2,000,000 миль от Солнца"

#----две табуляции---к параметру $2 добавлены нули

done

# (Спасибо S.C., за разъяснения.)

exit 0

В качестве списка, в цикле for, можно использовать переменную.

Пример 10-3. Fileinfo: обработка списка файлов, находящегося в переменной

#!/bin/bash

# fileinfo.sh

FILES="/usr/sbin/privatepw

/usr/sbin/pwck

/usr/sbin/go500gw

/usr/bin/fakefile

/sbin/mkreiserfs

/sbin/ypbind" # Список интересующих нас файлов.

# В список добавлен фиктивный файл /usr/bin/fakefile.

echo

for file in $FILES

do

if [ !
– e "$file" ] # Проверка наличия файла.

then

echo "Файл $file не найден."; echo

continue # Переход к следующей итерации.

fi

ls -l $file | awk '{ print $8 " размер: " $5 }' # Печать 2 полей.

whatis `basename $file` # Информация о файле.

Поделиться с друзьями: