Home

Page 21
Page 21
background image

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. – 

Прим. перев.):

-eq

 y – x = y (equal)

-ne

 y – x не равен y (not equal)

-g

t y  – x больше либо равен y (greater than)

-lt

 y  – x меньше либо равен y (lesser than)

ОПЕРАТОРЫ СРАВНЕНИЯ СТРОК

:

x = y  – строка x идентична y

x != y – строка х не совпадает y

-

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 и 

вариант без этой опции, чтобы понять, что я имею в виду. 


Copyright © 2021 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.