Скрипт listrpmpkgs, как мы успели заметить, не обладает развитыми вомзожностями. Он содержит и выполняет только одну команду. Мы не можем изменить его поведение, не написав другой скрипт.
Один из путей повышения мощности скрипта - научить его воспринимать опции командной строки. Подобно тому, как поведение утилиты rpm зависит от множества опций, мы можем изменять поведение скриптов, если сможем передавать в них информацию в виде параметров команды.
В языке shell определен ряд специальных переменных, с помощью которых можно передавать значения в сценарий. В таблице ниже перечисляются эти переменные.
Переменная |
Использование |
$0 |
Хранит имя самого скрипта, полученное из командной строки |
$1 |
Первая опция |
$2 |
Вторая опция |
$3 |
Третья опция |
$4 |
Четвертая опция |
$5 |
Пятая опция |
$6 |
Шестая опция |
$7 |
Седьмая опция |
$8 |
Восьмая опция |
$9 |
Девятая опция |
$* |
Все опции |
$# |
Число заданных опций |
Если вы используете C-shell, тогда вместо $# применяется $#argv .
В контексте нашего скрипта, что можно передать команде, которую он содержит, в качестве параметра? Команда всегда ищет строки, в которых есть буквосочетание rpm. Заменив шаблон на переменную, сможем искать что угодно:
#!/bin/sh |
Так теперь выглядит текст скрипта и ищет он подстроки, которые будут заданы в команде после имени файла. Переименуем его в rpmgrep и запустим, например, так:
$ ./rpmgrep python |
($* хранит все опции командной строки в виде строки с пробелами. Но shell не поддерживает больше 9 параметров, если не использовать оператор shift, а grep не поддерживает мультишаблонный поиск, для этого есть egrep. Поэтому, если ввести несколько параметров через пробел, например, ./rpmgrep rpm python, скрипт завершит работу с сообщением об ошибке. Итог - в данном случае в параметре передается "что-то, что ввели после имени файла в виде последовательности символов, не содержащей пробелов" - прим. перев. )
Далее - Файлы в rpm-пакетах
Назад - Преобразование скрипта в команду
Содержание