
U
ser
A
nd
LINUX
Programming
ualinux.com
21
U & L
1 1 - 0 1
echo
«Нажмите CTRL-C для выхода»
done
Это позволяет добиться точно такого же эффекта, но
быстрее, потому что «:» – это встроенная функция bash.
Единственное отличие состоит в принесении в жертву чи-
табельности кода. Используйте из приведенных вариантов
тот, который вам нравится больше. Ниже приведен гораз-
до более полезный вариант использования переменных:
#!/bin/bash
x=0;
while [ «$x» -le 10 ]; do
echo «Текущее значение х: $ х»
# Увеличиваем значение х:
x=$(expr $x + 1)
sleep 1
done
Здесь мы используем для проверки состояния пере-
менной x запись с квадратными скобками. Опция -le озна-
чает «меньше или равно (less or equal)». Говоря обычным
языком приведенный код говорит: «пока (while) х меньше
или равен 10, выводить на экран текущее значение х, по-
сле чего добавлять к текущему значению х единицу». Опе-
ратор sleep 1 приостанавливает выполнение программы
на одну секунду.
Ниже приведен список возможных операций сравне-
ния целых чисел (полный список приведен в man test. –
Прим. перев.):
x
-eq
y – x = y (equal)
x
-ne
y – x не равен y (not equal)
x
-g
t y – x больше либо равен y (greater than)
x
-lt
y – x меньше либо равен y (lesser than)
ОПЕРАТОРЫ СРАВНЕНИЯ СТРОК
:
x = y – строка x идентична y
x != y – строка х не совпадает y
-
n
x – выражение истинно, если строка х ненулевой
длины
-z
x – выражение истинно, если строка х имеет нуле-
вую длину
Скрипт, приведенный выше, нетрудно понять, за ис-
ключением, может быть, только этой строки:
x=$(expr $x + 1)
Комментарий приведенный выше он говорит нам, что
он увеличивает х на 1. Но что означает запись $ (...)? Это
переменная? Нет. На самом деле это способ сказать обо-
лочке, что вы хотите запустить команду expr $x + 1, и при-
своить результат ее выполнения переменной х. Любая ко-
манда, заключенная в $ (...) будет выполняться:
#!/bin/bash
me=$(whoami)
echo «Привет! Меня зовут $me»
Попробуйте сделать приведенный пример, и вы пойме-
те, что я имею в виду. Приведенный выше код можно было
бы сократить без каких-либо потерь вот так:
#!/bin/bash
echo «Привет! Меня зовут $(whoami)»
Вы сами можете выбрать, какая из записей вам ближе
и понятнее. Существует и другой способ для выполнения
команд или передачи результата их выполнения пере-
менной. Как это сделать - будет объяснено позже. Пока ис-
пользуйте запись вида $(...).
until … do … done
Оператор until применяется аналогично приведенному
выше while. Разница лишь в том, что условие работает на-
оборот. Цикл while выполняется до тех пор, пока условие
истинно. Цикл until – до тех пор, пока условие не станет
истинным. Например:
#!/bin/bash
x=0
until [ «$x» -ge 10 ]; do
echo «Текущее значение х равно $ х»
x=$(expr $x + 1)
sleep 1
done
Эта часть кода выглядит знакомой. Попробуйте ее на-
брать и посмотреть, что он делает. Приведенный цикл бу-
дет работать, пока x не станет больше или равен 10. Когда
величина x достигнет значения 10, цикл остановится. Та-
ким образом, последнее значение напечатанное значение
х будет 9.
for … in … do … done
Цикл for используется, когда вам надо перебрать не-
сколько значений переменной. Например, вы можете на-
писать небольшую программу, которая печатает 10 точек:
#!/bin/bash
echo -n «Проверка системы на наличие оши-
бок»
for dots in 1 2 3 4 5 6 7 8 9 10; do
echo -n «.»
done
echo «Ошибок не обнаружено»
Опция -n команды echo предотвращает автоматиче-
ский перевод строки. Попробуйте один раз вариант с -n и
вариант без этой опции, чтобы понять, что я имею в виду.