Параметры в Bash
#
Андрей Михайлович Васильев, 2025
Версии презентации
Описание параметров
#
Для объявления параметра используется синтаксис:
Для получения доступа к значению параметра используйте расширение ${name}
- Пробелы вокруг знака равенства недопустимы
- Если не указать значение, то переменная будет содержать нулевую строку
- Декларирование переменных может происходить в рамках команд
alias
,
declare
, typeset
, export
, readonly
, local
- Для отмены значений переменной необходимо использовать
unset name
- В названии переменной можно использовать латинские символы, подчёркивания
- В качестве значения может выступать любое строковое выражение, к которому
будут применены все расширения
Описание переменных. Пример
#
#!/bin/bash
info='Some data goes here'
echo "Значение info: $info" # Просмотр переменной
files=$(ls) # Сохранение результата вызова ls
echo "$files"
$ ls
abc test.sh
$ ./test.sh
Some data goes here
abc
test.sh
Со знака #
начинаются комментарии
Позиционные параметры
#
Внутри Bash-скрипта можно обратиться к аргументам интерпретатора с помощью
позиционных параметров, которые описываются числами, начиная с 1
- Данные параметры можно заменить с помощью встроенной команды
set
- Данные параметры нельзя изменить с помощью операции присвоения
#!/bin/bash
echo $1
echo $2
Для доступа к позиционным аргументам, состоящему из нескольких цифр, необходимо
использовать фигурные скобки
Специальная обработка аргументов
#
Команда shift
производит “сдвиг” позиционных аргументов влево
$1 <--- $2, $2 <--- $3, $3 <--- $4, ...
- Значение переменной $0 не изменяется
shift
может сдвигать сразу на несколько позиций
Рассмотрим следующий скрипт:
#!/bin/bash
echo $1
shift
echo $1
И пример его запуска:
$ ./test-args.sh first second
first
second
Специальные параметры
#
Данные параметры предоставляются Bash на чтение, запись в них невозможна
*
расширяется в список позиционных аргументов, начиная с первого. Если
обращение происходит без двойных кавычек, то выполняется разбиение по словам
@
расширяется в список позиционных аргументов, начиная с первого. Если
обращение происходит без двойных кавычек, то выполняется разделение по словам
Разница между ними заключается в формате расширения, первая команда зависит от
содержимого параметра IFS
#
расширяется в количество позиционных параметров, обычно используется для
проверки количества переданных аргументов
-
расширяется в список опций Bash
0
расширяется название интерпретатора или скрипта Bash
Параметры по работе с приложениями
#
Для работы с процессами путём отправки им сигналов можно воспользоваться
$
расширяется в идентификатор текущего процесса Bash
!
расширяется в идентификатор последнего фонового процесса
Обработка результатов работы команды
?
расширяется в код возврата последней команды
По соглашению нулевой код возврата команды считается корректным завершением
Массивы
#
Значением переменной может быть массив, индексируемый числами или строками
- любая переменная может использоваться как массив
- количество элементов в массиве не ограничено
- в численных массивах индексация начинается с нуля
Массивы можно определить с помощью
- команды
declare
: declare -a variable
- оператора присвоения, правой частью которого является
- индексируемый:
(value1 ... valueN)
- ассоциативный:
( key1 value1 key2 value2 )
- или:
( key1=value1 key2=value2 )
Работа с элементами массива
#
Для получения доступа к элементу массива следует использовать синтаксис:
- Для получения доступа ко всем элементам
${name[*]}
или ${name[@]}
- Помещение данных выражений в кавычки работает согласно расширению позиционных
параметров
Для установки нового значения элементу следует использовать синтаксис