14.4.5 Передача параметров в скрипт

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

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

В языке shell определен ряд специальных переменных, с помощью которых можно передавать значения в сценарий. В таблице ниже перечисляются эти переменные.

Переменная

Использование

$0

Хранит имя самого скрипта, полученное из командной строки

$1

Первая опция

$2

Вторая опция

$3

Третья опция

$4

Четвертая опция

$5

Пятая опция

$6

Шестая опция

$7

Седьмая опция

$8

Восьмая опция

$9

Девятая опция

$*

Все опции

$#

Число заданных опций

Если вы используете C-shell, тогда вместо $# применяется $#argv .

В контексте нашего скрипта, что можно передать команде, которую он содержит, в качестве параметра? Команда всегда ищет строки, в которых есть буквосочетание rpm. Заменив шаблон на переменную, сможем искать что угодно:

#!/bin/sh

rpm -qa | grep $*

Так теперь выглядит текст скрипта и ищет он подстроки, которые будут заданы в команде после имени файла. Переименуем его в rpmgrep и запустим, например, так:

$ ./rpmgrep python

python-devel-2.2.1-17

gnome-python2-gtkhtml2-1.99.11-8

gnome-python2-canvas-1.99.11-8

gnome-python2-1.99.11-8

rpm404-python-4.0.4-8x.27

orbit-python-1.99.0-4

gnome-python2-bonobo-1.99.11-8

gnome-python2-gconf-1.99.11-8

libxslt-python-1.0.19-1

libxml2-python-2.4.23-1

python-optik-1.3-2

python-2.2.1-17

rpm-python-4.1-1.06

mod_python-3.0.0-10

python-tools-2.2.1-17

($* хранит все опции командной строки в виде строки с пробелами. Но shell не поддерживает больше 9 параметров, если не использовать оператор shift, а grep не поддерживает мультишаблонный поиск, для этого есть egrep. Поэтому, если ввести несколько параметров через пробел, например, ./rpmgrep rpm python, скрипт завершит работу с сообщением об ошибке. Итог - в данном случае в параметре передается "что-то, что ввели после имени файла в виде последовательности символов, не содержащей пробелов" - прим. перев. )

Далее - Файлы в rpm-пакетах
Назад - Преобразование скрипта в команду
Содержание