Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

LINUX / KOZLOV2_1

.pdf
Скачиваний:
86
Добавлен:
27.03.2016
Размер:
4.3 Mб
Скачать

8.3. Арифметические операторы. Операции сравнения

Команда let это команда интерпретатора BASH, обеспечивающая выполнение операций над арифметическими величинами. С помощью этой команды можно сравнивать числовые значения или выполнять над ними арифметические операции, такие как сложение или умножение. Формат команды: let значение1 оператор значение2. Приведем пример:

$ let 2*5 10

В арифметические выражения, использующие оператор let, можно включать и операторы присваивания. В следующем примере результат умножения двух чисел присваивается переменной total:

$ let “total=2*5» $ echo $total

10

Операторы сравнения часто используются для сравнения числовых значений в управляющих конструкциях, таких как циклы и условные переходы.

В следующем примере команды сценария file1 четырежды выводят на экран слово «Привет!». В данном случае для управления выходом из цикла используется оператор let «ttt <= 4», а для увеличения переменной цикла again на единицу оператор let «ttt = ttt + 1». Обратите внимание на то, что при изменении переменной again ее вычислять не требуется.

File1

ttt=1

while let «ttt<= 4» do

echo $ttt Привет! let «ttt = ttt + 1» done

Выполнение скрипта: $ file1

Привет! Привет! Привет!

121

PDF created with pdfFactory Pro trial version www.pdffactory.com

Кроме того, можно использовать и другие арифметические операторы. В табл.8.1 приведены арифметические операторы и операторы сравнения BASH.

Таблица 8.1

Операторы BASH

Арифметические операторы

Функции

 

 

*

Умножение

 

 

/

Деление

 

 

+

Сложение

 

 

-

Вычитание

 

 

%

Деление с остатком

 

 

>

Больше чем

 

 

<

Меньше чем

 

 

>=

Больше либо равно

 

 

<=

Меньше либо равно

 

 

=

Равенство в

 

выражениях

 

 

= =

Равенство в команде let

 

 

!=

Не равно

 

 

&

Логическое И

 

 

|

Логическое ИЛИ

 

 

!

Логическое НЕ

 

 

8.4. Управляющие конструкции

Управляющие конструкции предназначены для управления ходом выполнения команд shell-сценария. Эти конструкции позволяют организовать повторное выполнение определенной последовательности команд или выбрать для выполнения команды, необходимые в конкретной ситуации.

Управляющая конструкция состоит из двух основных компонентов: операции проверки условия и команд. В результате выполнения сравнения (проверки условия) возвращается значение «истина» или «ложь», а затем на основании полученного результата выполняются определенные команды.

Существует два вида управляющих конструкций: циклические (циклы) и условные

(условия). Циклическая конструкция используется для повторного выполнения команд,

122

PDF created with pdfFactory Pro trial version www.pdffactory.com

условная для выполнения последовательности команд., которая удовлетворяет определенным условиям. В интерпретаторе BASH можно использовать три циклические конструкции (while, for и for-in) и две условные (if и case).

Управляющие конструкции while и if это конструкции общего назначения, которые обычно используются при решении таких задач, как итерационные вычисления и проверка различных условий. Управляющие конструкции case и for ориентированы на более узкий круг задач. Конструкция case является многовариантным оператором и представляет собой частный случай условного оператора if. Эта конструкция часто используется при создании меню. Конструкция for представляет собой цикл, однократно обрабатывающий всю информацию для каждого значения, включенного в список, до тех пор, пока не встретится окончание списка.

Кроме сравнения значений или переменных, управляющие конструкции if и while можно применять для проверки того, успешно или неудачно была выполнена системная команда Linux. Напомним, что в Linux каждая выполняемая команда возвращает код завершения. Если выполнение команды было успешным, ее код завершения равен нулю. Если по какой-либо причине команда не была выполнена успешно, кодом завершения будет некоторое положительное значение, указывающее тип ошибки. Управляющие конструкции if и while позволяют проверить, чему был равен код завершения: нулю или некоторому другому значению. Если код завершения равен нулю, значит, выполнение команды было успешным и управляющая конструкция if или while будет завершена. Команда test. Сравнивать значения можно не только с помощью условных управляющих конструкций, но также с помощью команды test. При сравнении двух значений test возвращает нуль в том случае, если сравнение будет успешным. Команда test позволяет сравнивать целые числа, строки и даже выполнять логические операции. Совместно с командой test применяют опции, которые задают тип сравнения. Полный перечень опций приведен в табл.8.2.

123

PDF created with pdfFactory Pro trial version www.pdffactory.com

Таблица 8.2

Операции, выполняемые командой test интерпретатора BASH

Опции

Функции

 

 

-gt

Больше чем

 

 

-it

Меньше чем

 

 

-ge

Больше чем либо равно

 

 

-le

Меньше чем либо равно

 

 

-eq

Равно

 

 

-ne

Не равно

 

 

-2

Проверка на наличие пустой строки

 

 

-n

Проверка на наличие строкового значения

 

 

=

Проверка строк на равенство

 

 

! =

Проверка строк на неравенство

 

 

str

Проверка на наличие строки, состоящей из нулей

 

 

-a

Логическое И

 

 

-о

Логическое ИЛИ

 

 

i

Логическое НЕ

 

 

-f

Установка факта существования файла и его

 

регулярности

 

 

-s

Проверяется, не является ли файл пустым

 

 

-r

Проверка возможности считывания из файла

 

 

-w

Проверка возможности записи в файл, а также

 

его изменения

 

 

-x

Проверяется, является ли файл исполнимым

 

 

-d

Проверяется, является ли имя файла именем

 

каталога

 

 

-h

Проверяется, является ли имя файла

 

символичной ссылкой

 

 

-b

Проверяется, обозначает ли имя блок-

 

ориентированное устройство

 

 

124

PDF created with pdfFactory Pro trial version www.pdffactory.com

Команда test имеет следующий синтаксис: test значение -опция значение

test строка = строка

Приведем пример использования команды test. Сравним целочисленные значения, для этого используем опцию равенства –eq. Для проверки результата выполнения операции сравнения используем код завершения последней выполненной команды test, который хранится в переменной $? интерпретатора shell.

$ tot=4

$ test $tot -eq 7 $ echo $?

1

Команда test $tot –eq 7 может быть записана и в другом виде: $ [ $tot –eq 7 ]

Условные конструкции if, if-else, elif, case. Интерпретатор BASH включает несколько условных управляющих конструкций (табл.8.3), которые позволяют выбирать для выполнения определенные команды Linux. Многие из этих конструкций напоминают условные управляющие конструкции в языках программирования, но имеются и некоторые отличия.

 

Таблица 8.3

Управляющие конструкции интерпретатора BASH

 

 

 

Конструкции

Функции

 

 

 

if команда then

Конструкция if вызывает выполнение действия в случае, если

команда fi

результат проверки истинен

 

 

 

 

if команда then

Конструкция if-else вызывает выполнение действия в случае,

команда else

если код завершения проверяемой команды paвен значению

 

команда fi

«истина», в противном случае выполняется действие else

 

 

 

 

if команда then

Конструкция elif дает возможность вкладывать конструкции

команда elif

if, что позволяет выбрать один из многих вариантов; если

 

команда then

истинно условие, проверяемое первой конструкцией if,

 

команда else

выполняются предусмотренные в ней команды и следующей

 

команда fi

конструкции elif управление не передается

 

 

 

 

case строка in

Конструкция case сравнивает строковое значение с одним из

шаблон) команда;;

нескольких шаблонов (образцов).

 

еsас

 

 

 

 

 

 

125

 

PDF created with pdfFactory Pro trial version www.pdffactory.com

команда &&

Логическая операция И (ИЛИ) возвращает значение 0

команда

истина»), если:

команда | |

обе команды возвращают значение 0; если же одна из

команда

команд возвращает ненулевое значение, результат

 

операции И равен «ложь» и данная операция воз-

 

вращает ненулевое значение;

 

одна или обе команды возвращают значение 0

 

истина»); если обе команды возвращают ненулевое

 

значение, то результат операции ИЛИ – «ложь» и

 

операция возвращает ненулевое значение

 

 

! команда

Логическая операция НЕ инвертирует код завершения

 

команды

 

 

while команда do

Конструкция while выполняет действие до тех пор, пока

команды done

команда проверки возвращает значение «истина»

 

 

until команда do

Конструкция until выполняет действие до тех пор, пока

команды done

команда проверки возвращает значение «ложь»

 

 

for переменная in

Конструкция for-in предназначена для обработки списка

список-значений do

значений. Переменной последовательно присваиваются

команды done

значения из списка

for переменная do

Переменной последовательно присваивается значение

команды done

каждого аргумента

 

 

select строка in

Конструкция select создает меню на основе элементов

перечень элементов

заданного списка, а затем выполняется указанная команда

do команды done

(обычно это команда case)

 

 

Условная конструкция if-then ставит условие на выполнение команды. Этим условием является код завершения какой-то конкретной команды Linux. Если команда выполнена успешно (код завершения равен нулю), то команды внутри конструкции if выполняются. Если код завершения отличен от нуля, то команды внутри конструкции if выполняться не будут. Иногда требуется выбрать один из двух вариантов, в зависимости от того, как была выполнены команда Linux. Ключевое слово else конструкции if позволяет сделать это.

Синтаксис команды if-then-else: if команда Linux then

команды

126

PDF created with pdfFactory Pro trial version www.pdffactory.com

else

команды

fi

Приведем пример использования данной конструкции в сценарии lastname: lastname

echo –n «Please enter your lastname: » read rrr

if [«rrr» = «Dima» ] then echo «Your lastname isDima» else echo «Your lastname is not Dima»

Конструкция case применяется для выбора одного из нескольких вариантов конструкции путем сравнения заданного в конструкции значения с несколькими возможными шаблонами. Каждое возможное значение проверяемой переменной связывается с набором операций. Если происходит совпадение значений переменных, то выполняются соответствующие данному значению операции.

Конструкция case начинается ключевым словом case, за которым следуют имя сравниваемой переменной и ключевое слово in. Затем перечисляется набор шаблонов. Каждый шаблон представляет собой регулярное выражение, заканчивающееся закрывающейся круглой скобкой. После закрывающейся круглой скобки следуют команды, связанные с этим шаблоном. Список команд требуется завершить двумя символами «;;» в отдельной строке, указывающими на завершение команд. Полную конструкцию завершает ключевое слово esac.

Синтаксис конструкции следующий: саsе строка in

шаблон)

команды

;;

шаблон)

команды

*)

команды, заданные по умолчанию esac

Цикл while. Циклическая команда while используется для повторения команд. Цикл начинается словом while, за которым идет команда Linux, в следующей строке используется ключевое слово do, по окончании цикла используется слово done. Синтаксис команды while:

while команда Linux

127

PDF created with pdfFactory Pro trial version www.pdffactory.com

do

команда(ы) done

Приведем пример использования while: myname

again=yes

while [ «$again» = yes ] do

echo -n «Please enter your name: « read name

echo «You entered is $name» echo -n «Do you wish to continue? read again

done

echo Good-bye

Приведем пример выполнения скрипта myname: $ myname

Please enter your name: Anatoliy You entered is Anatoliy

Do you wish to continue? yes Please enter your name: Andrey You entered is Andrey

Do you wish to continue? no Good-bye

Конструкция for-in предназначена для последовательного обращения к значениям, перечисленным в списке. Данная связка включает два операнда переменную и список значений. Каждое значение из списка поочередно присваивается переменной конструкции for-in. Конструкция является циклом и каждой переменной присваивается новое значение из списка. Полный цикл завершается при достижении конца списка. Основа цикла for-in начинается ключевым словом do и завершается ключевым словом done.

Синтаксис цикла for-in:

for переменная in перечень значений do

команды done

128

PDF created with pdfFactory Pro trial version www.pdffactory.com

В сценарии userprocess пользователь просто выводит список процессов перечисленных пользователей. Список пользователей представляет собой список значений, используемых в цикле for-in. Каждый пользователь последовательно присваивается переменной men. Значение переменной men используется при перенаправлении данных с команды вывода

перечня процессов на последовательное отображение процессов перечисленных пользователей:

userprocess

for men in vova antonk do

echo –n «Process list user: “ ps –ef | grep $men

echo –n “All done.» done

Пример выполнения скрипта userprocess:

[antonk@sentaurus ~]$ sh rrr Process list user:

antonk 11581 11579 0 13:06 pts/2 00:00:00 grep vova

vova 31370 1 0 Sepl4 ? 00:00:00 /syn/SYWOPSYS/CDS/IC/tools/bin/clsbd All done.

Process list user:

antonk 11583 11579 0 13:06 pts/2 00:00:00 grep jane All done.

[antonk@lab4236s ~]$

Цикл for. Конструкция for удобна при использовании аргументов командной строки при вызове файла в shell в качестве списка значений for. Все аргументы из этого списка автоматически присваиваются переменной, используемой в команде for. В первом цикле переменной присваивается значение первого аргумента, во втором цикле значение второго аргумента, в третьем значение третьего аргумента и т.д.

Покажем пример использования цикла for на следующем скрипте. Скрипт usert используется совместно с аргументами, в роли которых выступают имена пользователей. usert

for userr do

echo “Hello $userr» done

129

PDF created with pdfFactory Pro trial version www.pdffactory.com

[antonk@sentaurus ~]$ sh usert antonk denis vova sasha

Hello antonk Hello denis Hello vova Hello sasha

[antonk@sentaurus ~]$

Контрольные вопросы

1.Дайте определения понятий «SHELL-программирование» и «SHELL-скрипт». В каких случаях удобнее пользоваться SHELL-скриптами?

2.Как создать и запустить файл-сценарий? Какие SHELL-операторы запуска файлов- сценариев вам известны?

3.Что записывается в заголовке файла-сценария? Зависит ли содержимое заголовочной записи файла сценария от выбранного командного интерпретатора? Если зависит, то как?

4.Каким образом выполняются арифметические действия в файлах-сценариях? Приведите примеры. Каково назначение оператора test .

5.Каким образом в командном интерпретаторе BASH выполняется назначение новых переменных? Как вернуть значение переменной в интерпретаторе BASH? Каково назначение переменной export?

6.Приведите примеры использования управляющих конструкций.

7.Приведите пример простого сценария.

130

PDF created with pdfFactory Pro trial version www.pdffactory.com

Соседние файлы в папке LINUX