| 
				Операторы сравнения
				 Прежде чем перейти к рассмотрению условных операторов, познакомимся с операторами сравнения. Bash поддерживает несколько операторов сравнения. В случае если условие верно, каждый из них, как и любая корректно завершающаяся программа возвращают значение 0, которое интерпретируется как true, то есть истина. Любое другое значение - false, то есть ложь. Операторы сравнения записываются внутри квадратных скобок, причём, каждая скобка отделяется пробелом от остального текста с обеих сторон. Имеются следующие операторы сравнения: 
				
					
						| проверка прав доступа к файлу: |  
						| [ -d abcd ] | 	является ли файл abcd каталогом |  
						| [ -f abcd ] | 	является ли файл abcd обычным файлом |  
						| [ -L abcd ] | 	является ли файл abcd символической ссылкой |  
						| [ -r abcd ] | 	есть ли доступ на чтение к файлу abcd |  
						| [ -w abcd ] | 	есть ли доступ на запись к файлу abcd |  
						| [ -s abcd ] | 	файл abcd имеет ненулевой размер (он не пуст) |  
						| [ -u abcd ] | 	имеет ли файл abcd установленный бит SUID |  
						| [ -x abcd ] | 	является ли файл abcd исполняемым |  
						| проверка строк |  
						| [ -z $STRING ] | 	пуста ли строка STRING |  
						| [ -n $STRING ] | 	строка STRING не пуста |  
						| [ $STRING = $STRING1 ] | 	равны ли строки STRING и STRING1 |  
						| [ $STRING != $STRING1 ] | 	строки STRING и STRING1 не равны |  
						проверка чисел при проверке чисел в условии их обязательно необходимо заключить в двойные кавычки |  
						| [ $DIGIT -eq $DIGIT1 ] | 	равны ли числа DIGIT и DIGIT1 |  
						| [ $DIGIT -ne $DIGIT1 ] | 	числа DIGIT и DIGIT1 не равны |  
						| [ $DIGIT -gt $DIGIT1 ] | 	число DIGIT больше DIGIT1 |  
						| [ $DIGIT -lt $DIGIT1 ] | 	число DIGIT меньше DIGIT1 |  
						| [ $DIGIT -gе $DIGIT1 ] | 	число DIGIT больше или равно DIGIT1 |  
						| [ $DIGIT -lе $DIGIT1 ] | 	число DIGIT меньше или равно DIGIT1 |  
					
				 
				Если внутри оператора сравнения, перед самим условием поставить знак '!', то мы получим отрицание этого условия. Например: 
				
					[ ! -d "/home" ]
				 
				Данный оператор сравнения вернёт истину, если "/home" не является каталогом. 
				Оператор ветвления
				Теперь перейдём к самим операторам ветвления. Первый из них это условный оператор if-then-else-fi. Его синтаксис выгляди следующим образом: 
				
					if <оператор сравнения1> ; then  
					<действия 1> 
					elif <оператор сравнения2> ; then  
					<действия 2> 
					else  
					<действия 3> 
					fi  
				 
				Работает это так же как и во многих других языках программирования. То есть, если <оператор сравнения1> вернул значение 0, то будут выполнены <действия 1>, иначе будет проверятся код возврата <оператор сравнения2> и, в случае его истинности, выполнятся <действия 2>, иначе будут выполнены <действия 3>. Ветви elif и else не являются обязательными, ветвей elif, может быть много. 
				Небольшой пример. Допустим для дальнейшей работы сценария требуется информация из файла "userlist.txt". Неплохо было бы проверить, а есть ли вообще такой файл прежде чем пытаться с ним работать. 
				
					#!/bin/bash 
					FILE="userlist.txt" 
					if [ ! -f $FILE ] ; then 
					echo "Отсутствует файл $FILE" 
					exit 
					else 
					echo "Файл $FILE существует" 
					fi
				 
				 
				 
				
				Оператор множественного ветвления
				Вторым оператором ветвления является оператор множественного выбора case-in-esac. Он имеет следующий синтакис: 
				
					case <переменная> in  
					<значение 1>) 
					<действия 1> 
					;; 
					<значение 2>) 
					<действия 2> 
					;; 
					 
					... 
					 
					<значение N>) 
					<действия N> 
					;; 
					*) 
					<действия по умолчанию> 
					esac  
				 
				Работает естественно как и везде. То есть, если переменная совпадает с одним из значений отделённых скобками, то выполняется соответствующий список действий, который оканчивается символами ';;'. Если же подходящего значения нет, то будет выполнено действие обозначенное - '*', называемое действием по умолчанию. Описывать его не обязательно. 
				В качестве примера напишем калькулятор с простейшими действиями: сложение, умножение, вычитание, взятие целой части от деления, и взятие остатка. 
				
					#!/bin/bash 
					echo "Calculator" 
					echo -n "A = " 
					read A 
					echo -n "B = " 
					read B 
					echo -n "Operation [add, sub, mul, div, mod]: " 
					read SIGN 
					 
					case $SIGN in 
					   add) 
        					echo "A + B = "`expr $A '+' $B` 
    					;; 
    					sub) 
        					echo "A - B = "`expr $A '-' $B` 
    					;; 
					   mul) 
        					echo "A * B = "`expr $A '*' $B` 
    					;; 
    					div) 
        					echo "A / B = "`expr $A '/' $B` 
    					;; 
    					mod) 
        					echo "A % B = "`expr $A '%' $B` 
    					;; 
						*) 
						echo "Error: Incorrect operator" 
					esac
				 
				В этом примере, мы читаем со стандартного ввода два значения, и записываем их в переменные $A и $B. Затем предлагаем пользователю ввести желаемую арифметическую операцию, она будет записана в переменную $SIGN. В зависимости от значения переменной $SIGN выбираем необходимое действие, и выводим результат. Команда echo, печатает два аргумента. Строку записанную в двойных кавычках, которая описывает произведённое действие, и результат вычислений вызываемой команды expr над тремя аргументами: парой чисел, и знаком операции (заключены в обратные кавычки для вызова команды expr и передачи ей параметров). В случае если пользователь ввёл операцию, которую мы не предусмотрели, мы выведем сообщение об ошибке "Error: Incorrect operator". Корректность переменных $A и $B, проверяется внутри самой команды expr, и нам не нужно заботится о том, что пользователь может ввести вместо числа буквы, это "лежит на плечах" команды expr.  
				Символы '*' и '/' заключены в одинарные кавычки, поскольку при вызове команды expr, интерпретатор обработает их подставив имена всех файлов в текущем каталоге, и ссылку на корневой каталог соответственно. Остальные операторы закавычены для сохранения единства стиля. Опция -n в команде echo служит для подавления перевода строки при использовании команды. 
				 
				 Наверх  
				
			 |