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

Шоттс Уильям

Шрифт:

Заключительное замечание

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

Дополнительные сведения

Постарайтесь внимательно изучить программы из этой главы и достичь полного понимания их логической структуры, потому что программы, которые последуют далее, будут еще сложнее. В качестве упражнения перепишите программы этой главы, используя команду test вместо составной команды [[ ]]. Подсказка: используйте grep для сопоставления с регулярными выражениями, а затем проверяйте код завершения. Это станет для вас хорошей практикой.

29. Управление потоком выполнения: циклы while и until

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

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

Циклы

Повседневная жизнь наполнена повторяющимися действиями. Каждодневная поездка на работу, прогулка с собакой и нарезание моркови — все эти действия состоят из повторяющейся последовательности действий. Рассмотрим в качестве примера резку моркови. Этот вид деятельности можно выразить на псевдокоде примерно так:

1. Взять разделочную доску.

2. Взять нож.

3. Положить морковь на доску.

4. Поднять нож.

5. Сдвинуть морковь.

6. Отрезать кусок.

7. Если вся морковь порезана, завершить операцию, иначе перейти к шагу 4.

Шаги с 4-го по 7-й образуют цикл. Действия внутри цикла повторяются, пока не будет выполнено условие «вся морковь порезана».

while

В bash имеются средства, позволяющие выражать похожие идеи. Представьте, что нам нужно вывести пять чисел по порядку, от 1 до 5. В сценарии на языке bash это можно реализовать, как показано ниже:

#!/bin/bash

# while-count: вывод последовательности чисел

count=1

while [ $count -le 5 ]; do

echo $count

count=$((count + 1))

done

echo "Finished."

Если запустить этот сценарий, он выведет:

[me@linuxbox ~]$ while-count

1

2

3

4

5

Finished.

Команда while имеет следующий синтаксис:

while команды; do команды; done

Подобно if, команда while проверяет код завершения списка команд. Пока код завершения равен 0, она выполняет команды внутри цикла. В сценарии, приведенном выше, создается переменная count, и ей присваивается начальное значение 1. Команда while проверяет код завершения команды test. Пока test возвращает код 0, команды внутри цикла продолжают выполняться. В конце каждого цикла повторно выполняется команда test. После шести итераций цикла значение переменной count увеличится до 6, команда test вернет код завершения, отличный от 0, и цикл завершится, а программа продолжит выполнение с инструкции, следующей непосредственно за циклом.

Цикл while можно использовать для усовершенствования программы read-menu из главы 28:

#!/bin/bash

# while-menu: программа вывода системной информации,

# управляемая с помощью меню

DELAY=3 # Время отображения результатов на экране (в секундах)

while [[ $REPLY != 0 ]]; do

clear

cat <<- _EOF_

Please Select:

1. Display System Information

  • Читать дальше
  • 1
  • ...
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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