Добавил:
github.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
30.09.2023
Размер:
181.76 Кб
Скачать
  1. Расширенные возможности разработки скриптов

    1. Массивы

Помимо переменных, хранящих только одно значение, в командной оболочке возможно создание массивов, содержащих набор переменных с разными значениями, к которым можно обращаться по порядковому номеру.

Для объявления массива можно так же, как и для переменных использовать встроенную команду declare, только с указанием ключа «»:

declare -a <ARRAYNAME>

После вызова такой команды будет инициализирован массив с именем <ARRAYNAME>. Однако массивы точно так же, как и переменные, можно инициализировать без объявления, для этого существует несколько способов. Первый из них выглядит как

arr=(Hello World)

После такой инициализации в нулевой ячейке массива будет содержаться «Hello», а в первой – «World». Эквивалентное объявление выглядит как присваивание значений элементам массива:

arr[0]=”Hello”

arr[1]=”World”

Допускается делать пропуски в индексации элементов при присваивании. В случае инициализации:

arr[123]=”value”

в массиве arr элементы от 0 до 122 будут содержать пустые строки.

Для получения значения элемента массива его необходимо помещать в фигурные скобки «{}», например:

echo “${arr[0]}”

Для того, чтобы получить все значения всех элементов массива можно использовать

echo “${arr[*]}”

Также существуют специальные конструкции, позволяющие получить другую информацию о массиве:

echo “${!arr[*]}” # все индексы массива с ненулевыми данными

echo “${#arr[*]}” # количество ячеек массива с ненулевыми данными

echo “${#arr[0]}” # количество символов в нулевой ячейке массива

    1. Математические операции

По умолчанию в командной оболочке все переменные обрабатываются как строковые. Например, ожидается, что следующая последовательность команд выведет на экран сумму чисел 3 и 5:

a=3

b=5

echo $a+$b

Однако результатом вывода будет строка

«3+5»

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

Первым способом является использование оператора «(( … ))». Все выражения, помещенные внутрь двойных скобок, будут вычислены. Примеры использования приведены в Листинге Листинг 6.

Листинг 6. Пример вычисления выражений через «(( … ))»

1.

2.

3.

4.

5.

6.

A=$((1+2)) # A = 3

B=$(( 3 + 4 )) # B = 7

C=$(( $B + 4 )) # C = 11

(( A++ )) # A = 4

(( C += 3 )) # C = 14

D=$(( 5*6 )) # D = 30

При присваивании результата операции в переменную перед двойными скобками ставится символ «$». При операциях, присваивающих значение в изменяемую переменную, символ «$» не ставится. Внутри двойных скобок допускается писать математическое выражение как с использованием, так и без использования пробелов.

Еще одним способом описания математических выражений является использование встроенной команды «let». Пример представлен в Листинге Листинг 7:

Листинг 7. Пример вычисления выражений с использованием let

1.

2.

let A=2+3 # A = 5

let “B = $A * 2 + 4” # B = 14

При отсутствии кавычек все символы выражения должны быть написаны без использования пробелов. При добавлении кавычек возможно написание выражения с пробелами.

Еще один способ описания математических выражений – это использование встроенной команды «expr». Она аналогична let, за исключением того, что сохраняет результат выражения не в переменную, а выводит в stdout. Математическое выражение, указанное для expr, брать в кавычки не следует. При написании с кавычками выражение будет воспринято и выведено как строка. Примеры использования expr приведены в Листинге Листинг 8:

Листинг 8. Пример вычисления выражений с использованием expr

1.

2.

3.

expr 1 + 2 # to stdout: 3

expr “1 + 2” # to stdout: 1 + 2

A = $( expr 1 + 2 ) # A=3

Обратите внимание, что в строке 3 идет перехват вывода «expr» из stdout и его сохранение в переменную точно так же, как и для других команд.

В Таблице Таблица 2 приведен список допустимых операторов, которые могут применяться в командной оболочке для вычисления математических выражений.

Таблица 2. Математические операции командной оболочки

Операция

Описание

id++ id--

пост-инкремент и пост-декремент переменной id

++id --id

пред-инкремент и пред-декремент переменной id

- +

унарный минус, унарный плюс (изменение знака числа)

! ~

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

**

возведение в степень

* / %

умножение, деление, остаток от деления (целочисленные операции)

+ -

сложение, вычитание

<< >>

битовый сдвиг влево и вправо

<= >= < >

операции сравнения чисел

== !=

операции проверки равенства или неравенства чисел

& ^ |

побитовое И, побитовое НЕ и побитовое ИЛИ

&& ||

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

a ? b : c

условный оператор выбора (если a истинно выбирается b, в противном случае c)

= *= /= %= += -= <<= >>= &= ^= |=

операторы присваивания

a , b

запятая (поэтапное выполнение операций интерпретатором)

Вне зависимости от выбранного способа вычисления математического выражения («(( … ))», «let» или «expr») все операции являются целочисленными. Для выполнения операций с плавающей точкой может использоваться утилита «bc» [ CITATION Lin1 \l 1033 ].

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