Параметры в Bash

Параметры в Bash #

Андрей Михайлович Васильев, 2025

Версии презентации


Описание параметров #

Для объявления параметра используется синтаксис:

name=[value]

Для получения доступа к значению параметра используйте расширение ${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
$ bash some.sh 1 2
1
2
$ ./some.sh 1 2
1
2

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

echo ${12}

Специальная обработка аргументов #

Команда 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[subscript]}
  • Для получения доступа ко всем элементам ${name[*]} или ${name[@]}
  • Помещение данных выражений в кавычки работает согласно расширению позиционных параметров

Для установки нового значения элементу следует использовать синтаксис

name[subscript]=value

© A. M. Васильев, 2025, CC BY-SA 4.0, andrey@crafted.su