Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LABORATORNAYa_RABOTA__5.rtf
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
271 Кб
Скачать
☆

Использование арифметических вычислений. Операторы let и read

Оболочка bash поддерживает встроенные арифметические функции. Команда let является показателем того, что последующие аргументы представляют собой выражение, это единичный терм (term), обычно подлежащее вычислению. Простейшее выражение целочисленный.

Целые числа можно записывать как последовательность цифр или в любом базовом формате. Этот формат – radix#number, где radix (основание системы счисления) любое число не более 26. Для большинства команд основания систем счисления это – 2 (двоичная), 8 (восьмеричная) и 16 (шестнадцатеричная). Простейшими математическими выражениями являются сложение (+), вычитание (-), умножение (*), целочисленное деление (/) и целочисленный остаток (%). Команда let берет два операнда и присваивает их переменной.

Положительным моментом команды let можно считать то, что для идентификации переменной ей не нужен знак доллара; вы можете писать команды типа let sum=x+7, и let ищет переменную x и добавляет к ней 7. Команда let также расширяет другие выражения let, если они заключены в двойные круглые скобки. Таким способом вы можете создавать довольно сложные выражения. Команда let не ограничена простыми арифметическими выражениями. Табл.1  показывает полный набор let операций.

Таблица 1.

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

Оператор

Синтаксис

Результат

!

!ехр

Если ехр равно 0, возвращает 1; иначе 0

!=

ехр1 !=ехр2

Если ехр1 не равно ехр2, возвращает 1; иначе 0

%

ехр1%ехр2

Возвращает остаток от деления ехр1 на ехр2

%=

var=%exp

Присваивает остаток от деления var на ехр переменной var

&

ехр1&ехр2

Возвращает побитовое AND выражений ехр1 и ехр2

&&

ехр1&&ехр2

Если и ехр1 и ехр2 не равны нулю, возвращает 1; иначе 0

&=

var &= ехр

Присваивает var побитовое AND переменных var и выражения ехр

*

ехр1 * ехр2

Умножает ехр1 на ехр2

*=

var *= ехр

Умножает ехр на значение var и присваивает результат переменной var

+

ехр1 + ехр2

Складывает ехр1 и ехр2

+=

var += ехр

Складывает ехр со значением var и результат присваивает var

-

-exp

Операция отрицания exp (называется унарный минус)

-

expl - exp2

Вычитает exp2 из exp1

-=

var -= exp

Вычитает exp из значения var и присваивает результат var

/

exp / exp2

Делит exp1 на exp2

/=

var /= exp

Делит var на exp и присваивает результат var

<

expl < exp2

Если exp1 меньше, чем exp2, возвращает 1, иначе возвращает 0

<<

exp1<< exp2

Сдвигает exp1 влево на exp2 бит

<<=

var <<= exp

Побитовый сдвиг влево значения var на exp

<=

expl <= exp2

Если exp1 меньше, или равно exp2, возвращает 1; иначе возвращает 0

=

var = exp

Присваивает значение exp переменной var

= =

exp1= =exp2

Если exp1 равно exp2. Возвращает 1; иначе возвращает 0

>

exp1> exp2

1 если exp1 больше, чем exp2; иначе 0

>=

exp1 >= exp2

1 если exp1 больше, или равно exp2; иначе 0

>>

exp >> exp2

Сдвигает exp1 вправо на exp2 бит

>>=

var >>=exp

Побитовый сдвиг вправо значения var на exp

^

exp1 ^ exp2

ИсключающееOR выражений exp1 и exp2

^=

var ^= exp

Присваивает var побитовое исключающее OR var и exp

|

exp1 | exp2

Побитовое OR выражений exp1 и exp2

|=

var |= exp

Присваивает var «исключающее OR»  переменой var и выражения exp

||

exp1 || exp2

1 если или exp1 или exp2 являются ненулевыми значениями; иначе 0

~

~exp

Побитовое дополнение до exp

Кроме использования команды let в целях присваивания, let также выполняет обработку условий. Подобно С оболочка bash может присваивать переменной любое значение, а произвольное выражение само имеет значение, которое может использоваться. При этом «ноль» воспринимается как «ложь», а любое другое значение выражения – «истина». Для облегчения программирования можно записывать условия оболочки bash, в двойные скобки – (( )).

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

$let х=5

$while

> (( x-=1 ))

>do

>something

>done

$

Этот пример показывает выполнение с начальным значением 5 и декрементирует его до тех пор, пока оно не будет равно нулю. При каждой итерации выполняется функция something.

Наиболее распространенным является сокращение, избавляющееся от слова let в программах оболочек. Если объявить переменные целыми значениями, любое присвоение автоматически трактуется как арифметическое. Используйте typeset -1 для объявления и присвоения переменной, и при последующем использовании она становится целой. Или можете использовать ключевое слово integer (псевдоним для typeset -l) и объявлять переменные целыми. Таким образом, выражения типа х=y+z воспринимаются как арифметические.

Команда read позволяет читать значение переменных со стандартного ввода:

echo “Please enter Month and Day of Birth ?”

read mon day trash

В переменные mon и day будут считаны соответствующие значения, введенные с клавиатуры, а переменная trash нужна для того, чтобы отобрать всю избыточно введенную информацию и игнорировать ее. Изъять переменную из программы можно с помощью команды unset.

Имена некоторых переменных имеют для командного процессора специальный смысл. Значением переменной PATH (т.е. $РАТН) является список каталогов, в которых командный процессор осуществляет поиск программы или команды, указанной в командной строке, в том случае, если указанное имя программы или команды не содержит ни одного символа /. Если имя команды содержит хотя бы один символ /, то последовательность поиска, предписываемая значением переменной PATH, нарушается. В этом случае в зависимости от того, является имя команды абсолютным или относительным, поиск начинается соответственно от корневого или текущего каталога.

Если Вы сами явно не присвоите переменной PATH какого-либо значения, то стандартной (по умолчанию) последовательностью поиска файла является следующая: текущий каталог, каталог /bin, каталог /usr/bin. Именно в такой последовательности командный процессор отыскивает файлы, содержащие программы, которые обеспечивают выполнение таких, например, команд, как echo, lscat. В списке каталогов, являющемся значением переменной PATH, имена каталогов отделяются друг от друга с помощью символа двоеточия. В качестве примера приведем команду: PATH =:/usr/andy/bin:/usr/mike/bin:/bin:/usr/bin.

Переменные PS1 и PS2 предназначены для отображения промптера командного процессора. PS1 – это промптер командного процессора, по умолчанию его значение равно символу $ или #. Если какая-то интерактивная программа, запущенная командным процессором, требует ввода, то используется промптер PS2. Он по умолчанию имеет значение символа >.

Другие стандартные переменные:

HOME – имя домашнего каталога пользователя. Если команда cd вводится без аргументов, то происходит переход в каталог, указанный в этой переменной.

IFS – последовательность символов, являющихся разделителями в командной строке. Это символы пробел, табуляция и перевод строки(new line).

MAIL – командный процессор каждый раз перед выводом на экран промптера проверяет содержимое файла, имя которого указано в этой переменной, и если содержимое этого файла изменилось с момента последнего ввода из него, то перед тем как вывести на терминал промптер, командный процессор выводит на терминал сообщение You have mail (у Вас есть почта).

TERM – тип используемого терминала.

LOGNAME – содержит регистрационное имя пользователя, которое устанавливается автоматически при входе в систему.

В командном процессоре Си имеется еще несколько стандартных переменных. Значение всех переменных можно просмотреть с помощью команды set.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]