
- •Список сокращений
- •Введение
- •Автоматизация работы в командной строке
- •Применение автоматизации
- •Особенности командных оболочек
- •Основы разработки скриптов
- •Создание простого скрипта
- •Переменные
- •Работа с потоками ввода-вывода
- •Расширенные возможности разработки скриптов
- •Массивы
- •Математические операции
- •Условный оператор if
- •Оператор выбора case
- •Функции
- •Система контроля версий git
- •Упражнения
- •Индивидуальные задания
- •Контрольные вопросы
- •Список литературы
Расширенные возможности разработки скриптов
Массивы
Помимо переменных, хранящих только одно значение, в командной оболочке возможно создание массивов, содержащих набор переменных с разными значениями, к которым можно обращаться по порядковому номеру.
Для объявления массива можно так же, как и для переменных использовать встроенную команду 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]}” # количество символов в нулевой ячейке массива |
|
Математические операции
По умолчанию в командной оболочке все переменные обрабатываются как строковые. Например, ожидается, что следующая последовательность команд выведет на экран сумму чисел 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 ].