Linux-сервер своими руками
Шрифт:
Пример.
19.7.5. Подстановка команд и арифметических выражений
В гл. 13 (п. 13.5) мы уже сталкивались с подстановкой команд. Тогда переменной DT присваивался результат выполнения команды date:
Как я уже писал, при подстановке команд нужно использовать обратные одинарные кавычки (они расположены под символом тильды на клавиатуре). Подставлять можно не только одну команду, а целые списки команд:
В первом случае мы получим количество пользователей работающих в системе, а во втором — последовательно записанные
Подставлять результаты выполнения можно не только в переменные, а и в другие команды, например:
Данная команда ищет в файле /etc/passwd вхождение результата выполнения команды id –un
Подстановка арифметических выражений осуществляется с помощью конструкции $(( выражение )) Например:
При этом на экране вы увидите число 7, а не 7.5, потому что используется целочисленное вычисление. Пример. Количество часов, прошедшее с момента запуска оболочки:
19.7.6. Управляющие структуры и циклы
К управляющим структурам относятся:
• Конструкция if-fi.
• Конструкция case-esac.
Общий синтаксис конструкции if-fi:
Конструкция if-fi работает так же, как и в других языках программирования. Если список1 (условие) истинный, выполняется список1, иначе выполняется список3 и проверяется его истинность и т.д. Допускается неограниченная вложенность операторов if. Например:
Можно использовать сокращенный вариант:
Например:
Вместо списка команд удобно использовать команду test или выражение [условие]. Например, следующие выражения аналогичны:
И первое, и второе выражение проверяют существование файла /etc/passwd. Другие опции команды test представлены в табл. 19.38.
Опции команды test Таблица 19.38
Опция | Возвращаемое значение и описание |
---|---|
– d файл | Истина, если файл существует и является каталогом |
– е файл | Истина, если файл существует |
– f файл | Истина, если файл существует и является простым файлом |
– k файл | Истина, если файл существует и для него установлен бит односторонней операции |
– L файл | Истина, если файл существует и является ссылкой |
– r файл | Истина, если файл существует и доступен для чтения |
– s файл | Истина, если файл существует и его размер больше 0 |
– х файл | Истина, если файл существует и является исполнимым |
– w файл | Истина, если файл существует и доступен для записи |
– о файл | Истина, если файл существует и принадлежит данному пользователю |
– z строка | Истина, если длина строки равна 0 |
– n строка | Истина, если длина строки не равна 0 |
Команда test, в случае успешного завершения, возвращает значение истина, то есть 0 — успешное завершение. Если в скобках стоит непустое слово, test возвратит тоже 0, например:
В первом случае возвращается истина (true), на экран выводится ноль — код удачного (безошибочного) завершения программы. Во втором случае на экран выводится единица — команда test возвратила значение ложь (false). Сравнение строк осуществляется следующим образом: выражения str1 = str2 или str1 == str2 истинны, когда строки str1 и str2 равны. Обратите внимание: между двумя символами равно не должно быть пропуска!
Символ ! инвертирует любое условие команды test, например, выражение str1 != str2 будет истинным, когда строки str1 и str2 не равны между собой. Символ ! является символом логической операции NOT (отрицание). Кроме этого символа, можно использовать опции команды –о и –а, которые обозначают логические операции ИЛИ (OR) и И (AND). Например:
0
1
В первом случае непустая строка str возвращает истину, опция —f возвращает также истину, потому что файл /etc/passwd существует всегда. Результат операции И: истина И истина = истина, поэтому на экране вы увидите 0.
Во втором случае пустая строка str возвратит ложь, а опция –f возвращает истину. Результат операции И: ложь И истина = ложь. Если вы забыли законы логики, освежите свои знания с помощью табл. 19.39.
Логические операции Таблица 19.39
AND | True | False | OR | True | False | XOR | True | False |
---|---|---|---|---|---|---|---|---|
True | True | False | True | True | True | True | False | True |
False | False | False | False | True | False | False | True | False |
Операция XOR — это исключающее ИЛИ. Данная операция не используется при создании сценариев с помощью интерпретатора bash.
Для сравнения целых чисел используются опции команды test,приведенные в табл. 19.40.
Сравнение целых чисел Таблица 19.40
Опция | Описание |
---|---|
– eq | Равно |
– ne | Не равно |
– It | Меньше |
– gt | Больше |
– le | Меньше или равно |
– ge | Больше или равно |
Интерпретатор bash воспринимает строки, как целые числа. Если нужно обнулить строку, то это достигается таким присваиванием: х=0.