Параметры и переменные

11.04.2018

Теги: BashCLILinuxsetПараметрПеременная

Формально параметры включают в себя аргументы, передаваемые программе (т.е. позиционные параметры), специальные переменные оболочки вроде $# и $?, а также обыкновенные переменные, называемые также ключевыми параметрами.

Позиционным параметрам нельзя присваивать значения непосредственно, хотя с помощью команды set можно переназначать их значения. Для присваивания значений переменным служит форма:

переменная=значение переменная=значение …

Например, присвоим значения трем переменным:

$ x=50 y=100 z=200
$ echo $x $y $z
50 100 200

Подстановка значений переменных

В простейшей форме для подстановки значения переменной ее имя предваряется знаком $, например $var или $2.

Конструкция ${переменная}

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

$ mv $file ${file}bak

Конструкция ${переменная:-значение}

Конструкция предписывает использовать значение указанной переменной, если оно не является пустым, а иначе — подставить заданное значение:

$ echo Using editor ${EDITOR:-/bin/vi}

Это все равно, что написать:

if [ -n "$EDITOR" ] ; then
    echo Using editor $EDITOR
else
    echo Using editor /bin/vi
fi

Конструкция ${переменная:=значение}

Эта конструкция подобна предыдущей, но если заданная переменная имеет пустое значение, то указанное значение не только используется, но и присваивается заданной переменной:

${PHONEBOOK:$HOME/phonebook.txt}

Следует, однако, иметь ввиду, что приведенную выше конструкцию нельзя применять в качестве отдельной команды. Ведь после произведенной подстановки оболочка попытается выполнить результат такой подстановки как команду. Чтобы воспользоваться данной конструкцией как отдельной командой, надо написать:

$ : ${PHONEBOOK:$HOME/phonebook.txt}

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

$ PHONEBOOK=
$ echo $PHONEBOOK

$ : ${PHONEBOOK:$HOME/phonebook.txt}
$ echo $PHONEBOOK
/home/evgeniy/phonebook.txt

Конструкция ${переменная:?значение}

Если в этой конструкции заданная переменная имеет непустое значение, то оболочка подставит его. В противном случае оболочка направит указанное значение в стандартный вывод ошибок и на этом завершит свое выполнение. Но это не означает выход из системы, если данная конструкция была выполнена в исходной оболочке.

Конструкция ${переменная:+значение}

В данной конструкции указанное значение подставляется, если заданная переменная имеет непустое значение, а иначе вообще ничего не подставляется.

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

WORKDIR=${DBDIR:-$(pwd)}

В данном примере переменной WORKDIR присаивается значение параметра DBDIR, если оно непустое. В противном случае выполняется команда pwd, а результат присваивается переменной WORKDIR. Таким образом, команда pwd выполняется лишь в том случае, если значение параметра DBDIR оказывается пустым.

Команда set

Служит двум целям: для установки различных параметров оболочки и переназначения позиционных параметров $1, $2 и т.п.

Опция -x команды set позволяет включить режим трассировки. Если в исходном коде сценария добавить команду

set -x

то данные обо всех выполняемых далее командах будут направлены оболочкой в стандартный вывод ошибок после имени файла, переменной и подстановки команд. Имена трассируемых команд предваряются знаками «плюс».

$ list=*
$ set -x
$ echo $list
+ echo phonebook.txt unix.txt linux.txt
phonebook.txt unix.txt linux.txt
$ cmd=wc
+ cmd=wc
cmd=wc
$ ls | $cmd -l
+ ls
+ wc -l
      3

Для выключения режима трассировки, надо в код сценария добавить команду

set +x

В исходном коде сценария можно указать любое количество команд set -x и set +x, чтобы включать и выключать режим трассировки по мере надобности.

Еще один способ включить режим трассировки — запуск подоболочки с параметром -x, благодаря которому весь сценарий будет запущен в отладочном режиме

$ bash -x backup.sh
Если запустить команду set без параметров, будет получен список всех переменных (локальных или экспортируемых), существующих в текущей среде.

Переназначение позиционных параметров

$ set one two three four
$ echo $1:$2:$3:$4
one:two:three:four
$ echo $#
4
$ echo $*
one two three four
$ for arg; do echo $arg; done
one
two
three
four

Поиск: Bash • CLI • Linux • set • Параметр • Переменная

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.