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

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

В Bash имеется десять позиционных параметров: $0, $1, ..., $9. Они содержат:

r $0 — имя команды;

r параметры от $1 до $9 — значения девяти аргументов командной строки.

 

Пример 10.15. Позиционные параметры

 

$ cat param.sh

#!/bin/bash echo $1 echo $2

$ ./param.sh first second first

second

 

В сценарии param.sh (пример 10.15) содержатся две команды echo, выводя- щие содержимое первого и второго позиционных параметров, которое соот- ветствует первому и второму аргументу командной строки.

Кроме позиционных параметров в Bash используются специальные параметры:

r $* — строка, составленная из значений всех аргументов командной строки;

r $@ — содержит строку, составленную из значений всех аргументов команд- ной строки, разделенных пробелами (аналогично, но не тождественно $*);


 

r $# — количество аргументов командной строки;

r $? — код возврата предыдущей команды;

r $$ — PID оболочки.

В примере 10.16 сценарий выводит все аргументы командной строки.

 

Пример 10.16. Параметр $*

 

$ cat comline.sh

#!/bin/bash echo $*

 

$ ./comline.sh 11 aa 22 bbb

11 aa 22 bbb

 

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

При необходимости получить значения аргументов (опций) командной стро- ки, содержащей более девяти аргументов, используют команду shift. Ко- манда shift, вызванная без аргументов, сдвигает позиционные параметры вправо (пример 10.17). То есть $1 получит значение, которое имел $2, пара- метр $2 — значение $3 и т. д.

 

Пример 10.17. Команда shift

 

$ cat param.sh

#!/bin/bash echo $1 echo $2

echo And now all parameters are shifted. shift

echo $1 echo $2

 

$ ./param.sh first second third first

second

And now all parameters are shifted. second

third


 

В этом сценарии (пример 10.17) сначала выводятся аргументы командной строки без сдвига. То есть выводятся первый и второй аргументы командной строки, а после использования команды shift — второй и третий, хотя ис- пользованы все те же позиционные параметры $1 и $2.

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

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

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

 

Пример 10.18. Установка аргументов с помощью set

 

$ cat param.sh

#!/bin/bash echo $1 echo $2

set 1 2 echo $1 echo $2

 

$ ./param.sh first second first

second 1

 

Здесь продемонстрировано, что изменение всех аргументов командой set

приводит к изменению позиционных параметров.

При необходимости сохранить значение одного или нескольких позицион- ных параметров следует использовать команду set, указав в требуемых по- зициях позиционные параметры, не подлежащие изменению (пример 10.19).


 

Пример 10.19. Сохранение значений позиционных параметров при вызове set

 

set $1 $2 newarg $4

 

В этом случае (см. пример 10.19) командная строка текущей оболочки со- держит только четыре аргумента. Команда set изменяет все их сразу, а для сохранения значений первому, второму и четвертому аргументам просто присваиваются их же старые значения. Третий аргумент получает здесь но- вое значение — newarg.








Дата добавления: 2015-06-12; просмотров: 967;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.101 сек.