Чтение онлайн

на главную

Жанры

Linux-сервер своими руками

Колисниченко Денис Николаевич

Шрифт:

Общий синтаксис конструкции if-fi:

if список1 then

 список2

elif

 список3

then

 список4

else

 список3

fi

Конструкция if-fi работает так же, как и в других языках программирования. Если список1 (условие) истинный, выполняется список1, иначе выполняется список3 и проверяется его истинность и т.д. Допускается неограниченная вложенность операторов if. Например:

if uuencode myfile myfile > myfile.uu; then

 echo "Успешное
конвертирование";

else

 echo "Ошибка";

fi

Можно использовать сокращенный вариант:

if список1 then

 список2

fi

Например:

if [ $? –ne 0 ]; then echo "Ошибка. См. файл протокола"; fi;

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

test –e /etc/passwd

[-е /etc/passwd]

И первое, и второе выражение проверяют существование файла /etc/passwd. Другие опции команды test представлены в табл. 19.38.

Опции команды test Таблица 19.38

Опция Возвращаемое значение и описание
– d файл Истина, если файл существует и является каталогом
– е файл Истина, если файл существует
– f файл Истина, если файл существует и является простым файлом
– k файл Истина, если файл существует и для него установлен бит односторонней операции
– L файл Истина, если файл существует и является ссылкой
– r файл Истина, если файл существует и доступен для чтения
– s файл Истина, если файл существует и его размер больше 0
х файл Истина, если файл существует и является исполнимым
– w файл Истина, если файл существует и доступен для записи
– о файл Истина, если файл существует и принадлежит данному пользователю
– z строка Истина, если длина строки равна 0
– n строка Истина, если длина строки не равна 0

Команда test, в случае успешного завершения, возвращает значение истина, то есть 0 — успешное завершение. Если в скобках стоит непустое слово, test возвратит тоже 0, например:

[ word ]; echo $?

0

[]; echo $?

1

В первом случае возвращается истина (true), на экран выводится ноль — код удачного (безошибочного) завершения программы. Во втором случае на экран выводится единица — команда test возвратила значение ложь (false). Сравнение строк осуществляется следующим образом: выражения str1 = str2 или str1 == str2 истинны, когда строки str1 и str2 равны. Обратите внимание: между двумя символами равно не должно быть пропуска!

Символ ! инвертирует любое условие команды test, например, выражение str1 != str2 будет истинным, когда строки str1 и str2 не равны между собой. Символ ! является символом логической

операции NOT (отрицание). Кроме этого символа, можно использовать опции команды –о и –а, которые обозначают логические операции ИЛИ (OR) и И (AND). Например:

str="word"; export str; ["$str" –a –f /etc/passwd]; echo $?

0

str=""; export str; ["$str" –a –f /etc/passwd]; echo $?

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.

Пример.

х=124 ; export х ; [ 111 –It "$х" ] ; echo $?

0

Поскольку 111 меньше, чем 124, на экране вы увидите 0 (истина).

Примечание. Во всех примерах, вы, наверное, заметили использование команды export. Это необходимо для того, чтобы порожденному процессу (не забывайте: test — это отдельная программа) переменнаях была доступна.

Теперь, когда мы уже знакомы с конструкциями test и if, рассмотрим небольшой пример, демонстрирующий вложенность операторов if и использование команды test. Пример приведен в листинге 19.2.

Листинг 19.2. Пример вложенности операторов

echo –n "Какую оценку ты получил сегодня по программированию? "

read x

if [ $х = 5 ]

 then echo "Отлично !"

elif [ $х = 4 ]

 then echo "Хорошо"

elif [ $x = 3 ]

 then echo "Удовлетворительно"

elif [ $x = 2 ]

 then echo "Надо бы пересдать"

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

Идущий в тени 5

Амврелий Марк
5. Идущий в тени
Фантастика:
фэнтези
рпг
5.50
рейтинг книги
Идущий в тени 5

Герой

Бубела Олег Николаевич
4. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Герой

Девятый

Каменистый Артем
1. Девятый
Фантастика:
боевая фантастика
попаданцы
9.15
рейтинг книги
Девятый

70 Рублей

Кожевников Павел
1. 70 Рублей
Фантастика:
фэнтези
боевая фантастика
попаданцы
постапокалипсис
6.00
рейтинг книги
70 Рублей

Возмездие

Злобин Михаил
4. О чем молчат могилы
Фантастика:
фэнтези
7.47
рейтинг книги
Возмездие

Школа. Первый пояс

Игнатов Михаил Павлович
2. Путь
Фантастика:
фэнтези
7.67
рейтинг книги
Школа. Первый пояс

Я снова не князь! Книга XVII

Дрейк Сириус
17. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я снова не князь! Книга XVII

Газлайтер. Том 9

Володин Григорий
9. История Телепата
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Газлайтер. Том 9

Дайте поспать! Том II

Матисов Павел
2. Вечный Сон
Фантастика:
фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Дайте поспать! Том II

Корсар

Русич Антон
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.29
рейтинг книги
Корсар

Менталист. Революция

Еслер Андрей
3. Выиграть у времени
Фантастика:
боевая фантастика
5.48
рейтинг книги
Менталист. Революция

Убивать, чтобы жить

Бор Жорж
1. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать, чтобы жить

СД. Восемнадцатый том. Часть 1

Клеванский Кирилл Сергеевич
31. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
6.93
рейтинг книги
СД. Восемнадцатый том. Часть 1

Прометей: каменный век

Рави Ивар
1. Прометей
Фантастика:
альтернативная история
6.82
рейтинг книги
Прометей: каменный век