Краткое введение в программирование на Bash | страница 8
>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 и вариант без этой опции, чтобы понять, что я имею в виду. Переменная dots последовательно принимает значения от 1 до 10 и одновременно скрипт печатает на экране точку.
Приведенный дальше пример показывает, что я имею в виду под выражением «переменная последовательно принимает несколько значений»: