Вход/Регистрация
Командная строка Linux
вернуться

Шоттс Уильям

Шрифт:

esac

shift

done

# интерактивный режим

if [[ -n $interactive ]]; then

while true; do

read -p "Enter name of output file: " filename

if [[ -e $filename ]]; then

read -p "'$filename' exists. Overwrite? [y/n/q] > "

case $REPLY in

Y|y) break

;;

Q|q) echo "Program terminated."

exit

;;

*) continue

;;

esac

fi

done

fi

# вывод страницы html

if [[ -n $filename ]]; then

if touch $filename && [[ -f $filename ]]; then

write_html_page > $filename

else

echo "$PROGNAME: Cannot write file '$filename'" >&2

exit 1

fi

else

write_html_page

fi

У нас уже получился неплохой сценарий, но он еще не закончен. В следующей главе мы добавим в него последнее улучшение.

33. Управление потоком выполнения: цикл for

В этой заключительной главе, посвященной управлению потоком выполнения, мы познакомимся еще с одной конструкцией организации циклов в командной оболочке. Цикл for отличается от циклов while и until поддержкой средств обработки последовательностей. Это очень полезная возможность. Как следствие, цикл for пользуется большой популярностью среди создателей сценариев для bash.

Цикл for реализован, что вполне естественно, в виде команды for. В современных версиях bash поддерживается две формы команды for.

for: традиционная форма

Оригинальный синтаксис команды for имеет следующий вид:

for переменная [in слова]; do

команды

done

где переменная — это имя переменной, значение которой будет увеличиваться в ходе выполнения цикла, слова — необязательный список элементов, которые последовательно будут присваиваться переменной, и команды — это команды, выполняемые в каждой итерации.

Команду for удобно использовать в командной строке. Рассмотрим, как она работает:

[me@linuxbox ~]$ for i in A B C D; do echo $i; done

A

B

C

D

В этом примере команда for получает список из четырех слов: A, B, C и D. Для обхода этого списка выполняется четыре итерации цикла. В начале каждой итерации переменной i присваивается очередное слово. Внутри цикла находится команда echo, она выводит значение i, чтобы показать, что присваивание действительно выполняется. Так же как в случае с циклами while и until, цикл for заканчивается ключевым словом done.

По-настоящему мощной особенностью for является разнообразие способов формирования списка слов. Например, можно использовать подстановку в фигурных скобках:

[me@linuxbox ~]$ for i in {A..D}; do echo $i; done

A

B

C

D

или подстановку имен файлов:

[me@linuxbox ~]$ for i in distros*.txt; do echo $i; done

distros-by-date.txt

distros-dates.txt

distros-key-names.txt

distros-key-vernums.txt

distros-names.txt

distros.txt

distros-vernums.txt

distros-versions.txt

или подстановку команд:

#!/bin/bash

# longest-word : поиск самой длинной строки в файле

while [[ -n $1 ]]; do

if [[ -r $1 ]]; then

max_word=

max_len=0

for i in $(strings $1); do

len=$(echo $i | wc -c)

if (( len > max_len )); then

  • Читать дальше
  • 1
  • ...
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: