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

Тут можно читать онлайн Мендель Купер - Искусство программирования на языке сценариев командной оболочки - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Искусство программирования на языке сценариев командной оболочки
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3.7/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

Искусство программирования на языке сценариев командной оболочки - описание и краткое содержание, автор Мендель Купер, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Данное руководство не предполагает наличие у читателя познаний в области программирования на языке сценариев, однако, быстро восполняет этот недостаток, постепенно, шаг за шагом раскрывая мудрость и красоту UNIX. Это руководство может рассматриваться как учебник, предназначенный для самостоятельного изучения или как справочник по программированию на shell. Руководство снабжено серией хорошо прокомментированных примеров, поскольку лучший путь к изучению языка сценариев -- это написание сценариев.

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

Искусство программирования на языке сценариев командной оболочки - читать книгу онлайн бесплатно, автор Мендель Купер
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Пример 10-19. Вложенный цикл

#!/bin/bash

# Вложенные циклы "for".

outer=1 # Счетчик внешнего цикла.

# Начало внешнего цикла.

for a in 1 2 3 4 5

do

echo "Итерация #$outer внешнего цикла."

echo "---------------------"

inner=1 # Сброс счетчика вложенного цикла.

# Начало вложенного цикла.

for b in 1 2 3 4 5

do

echo "Итерация #$inner вложенного цикла."

let "inner+=1" # Увеличить счетчик итераций вложенного цикла.

done

# Конец вложенного цикла.

let "outer+=1" # Увеличить счетчик итераций внешнего цикла.

echo # Пустая строка для отделения итераций внешнего цикла.

done

# Конец внешнего цикла.

exit 0

Демонстрацию вложенных циклов "while" вы найдете в Пример 25-6, а вложение цикла "while" в "until" -- в Пример 25-8.

10.3. Управление ходом выполнения цикла

break, continue

Для управления ходом выполнения цикла служат команды breakи continue [ 23 ] Эти команды являются встроенными командами языка сценариев командной оболочки (shell), в то время как while, case и т.п. -- являются зарезервированными словами. и точно соответствуют своим аналогам в других языках программирования. Команда breakпрерывает исполнение цикла, в то время как continueпередает управление в начало цикло, минуя все последующие команды в теле цикла.

Пример 10-20. Команды break и continue в цикле

#!/bin/bash

LIMIT=19 # Верхний предел

echo

echo "Печать чисел от 1 до 20 (исключая 3 и 11)."

a=0

while [ $a -le "$LIMIT" ]

do

a=$(($a+1))

if [ "$a" -eq 3 ] || [ "$a" -eq 11 ] # Исключить 3 и 11

then

continue # Переход в начало цикла.

fi

echo -n "$a "

done

# Упражнение:

# Почему число 20 тоже выводится?

echo; echo

echo Печать чисел от 1 до 20, но взгляните, что происходит после вывода числа 2

##################################################################

# Тот же цикл, только 'continue' заменено на 'break'.

a=0

while [ "$a" -le "$LIMIT" ]

do

a=$(($a+1))

if [ "$a" -gt 2 ]

then

break # Завершение работы цикла.

fi

echo -n "$a "

done

echo; echo; echo

exit 0

Команде breakможет быть передан необязательный параметр. Команда breakбез параметра прерывает тот цикл, в который она вставлена, а break Nпрерывает цикл, стоящий на N уровней выше (причем 1-й уровень -- это уровень текущего цикла, прим. перев.).

Пример 10-21. Прерывание многоуровневых циклов

#!/bin/bash

# break-levels.sh: Прерывание циклов.

# "break N" прерывает исполнение цикла, стоящего на N уровней выше текущего.

for outerloop in 1 2 3 4 5

do

echo -n "Группа $outerloop: "

for innerloop in 1 2 3 4 5

do

echo -n "$innerloop "

if [ "$innerloop" -eq 3 ]

then

break # Попробуйте "break 2",

# тогда будут прерываться как вложенный, так и внешний циклы

fi

done

echo

done

echo

exit 0

Команда continue, как и команда break, может иметь необязательный параметр. В простейшем случае, команда continueпередает управление в начало текущего цикла, а команда continue Nпрерывает исполнение текущего цикла и передает управление в начало внешнего цикла, отстоящего от текущего на N уровней (причем 1-й уровень -- это уровень текущего цикла, прим. перев.).

Пример 10-22. Передача управление в начало внешнего цикла

#!/bin/bash

# Команда "continue N" передает управление в начало внешнего цикла, отстоящего от текущего на N уровней.

for outer in I II III IV V # внешний цикл

do

echo; echo -n "Группа $outer: "

for inner in 1 2 3 4 5 6 7 8 9 10 # вложенный цикл

do

if [ "$inner" -eq 7 ]

then

continue 2 # Передача управления в начало цикла 2-го уровня.

# попробуйте убрать параметр 2 команды "continue"

fi

echo -n "$inner " # 8 9 10 никогда не будут напечатаны.

done

done

echo; echo

# Упражнение:

# Подумайте, где реально можно использовать "continue N" в сценариях.

exit 0

Пример 10-23. Живой пример использования "continue N"

# Albert Reiner привел пример использования "continue N":

# ---------------------------------------------------------

# Допустим, у меня есть большое количество задач, обрабатывающие некоторые данные,

#+ которые хранятся в некоторых файлах, с именами, задаваемыми по шаблону,

#+ в заданном каталоге.

#+ Есть несколько машин, которым открыт доступ к этому каталогу

#+ и я хочу распределить обработку информации между машинами.

#+ тогда я обычно для каждой машины пишу нечто подобное:

while true

do

for n in .iso.*

do

[ "$n" = ".iso.opts" ] && continue

beta=${n#.iso.}

[ -r .Iso.$beta ] && continue

[ -r .lock.$beta ] && sleep 10 && continue

lockfile -r0 .lock.$beta || continue

echo -n "$beta: " `date`

run-isotherm $beta

date

ls -alF .Iso.$beta

[ -r .Iso.$beta ] && rm -f .lock.$beta

continue 2

done

break

done

# Конкретная реализация цикла, особенно sleep N, зависит от конкретных применений,

#+ но в общем случае он строится по такой схеме:

while true

do

for job in {шаблон}

do

{файл уже обработан или обрабатывается} && continue

{пометить файл как обрабатываемый, обработать, пометить как обработанный}

continue 2

done

break # Или что нибудь подобное `sleep 600', чтобы избежать завершения.

done

# Этот сценарий завершит работу после того как все данные будут обработаны

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

#+ соответствующих lock-файлоа позволяет вести обработку на нескольких машинах

#+ одновременно, не производя дублирующих вычислений [которые, в моем случае,

#+ выполняются в течении нескольких часов, так что для меня это очень важно].

#+ Кроме того, поскольку поиск необработанных файлов всегда начинается с

#+ самого начала, можно задавать приоритеты в именах файлов. Конечно, можно

#+ обойтись и без `continue 2', но тогда придется ввести дополнительную

#+ проверку -- действительно ли был обработан тот или иной файл

#+ (чтобы перейти к поиску следующего необработанного файла).

картинка 58Конструкция continue Nдовольно сложна в понимании и применении, поэтому, вероятно лучше будет постараться избегать ее использования.

10.4. Операторы выбора

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Мендель Купер читать все книги автора по порядку

Мендель Купер - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Искусство программирования на языке сценариев командной оболочки, автор: Мендель Купер. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x