Позиционные параметры
Позиционные параметры позволяют сценариям оболочки получать информа- цию, задаваемую в командной строке при их запуске.
В 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; просмотров: 1027;