• what
для запуска who
и ps -а
, чтобы сообщить, кто работает в системе и что он делает;
• where
для вывода идентифицированного названия используемой системы UNIX. Это удобно, если вы постоянно работаете с несколькими версиями. (Установка PS1
служит для подобной цели.)
Просмотрите каталоги /bin
и /usr/bin
, чтобы выяснить, как много команд являются в действительности командными файлами. Можно ли это сделать с помощью одной команды? Подсказка: посмотрите file(1)
. Насколько точно предположение, основанное на длине файла?
3.4 Аргументы и параметры команд
Хотя команда nu
, как она задумывалась, удовлетворяет своему назначению, многие программы на языке shell
могут обрабатывать аргументы, так что при их запуске можно задавать имена файлов и флаги.
Допустим, вы хотите создать программу с именем cx
для установки права доступа к файлу на выполнение, так что
$ cx nu
есть сокращенная запись для
$ chmod +x nu
Вы уже знаете почти все, чтобы это сделать. Вам нужен файл cx
, содержимое которого суть
chmod +x filename
Единственное, что требуется выяснить — как сообщить команде cx
имя файла, так как при каждом запуске cx
оно будет иным.
Если интерпретатор выполняет командный файл, то каждое вхождение $1
заменяется первым аргументом, каждое вхождение $2
— вторым и т.д. до $9
. Поэтому если файл cx
содержит строку
chmod +x $1
то при выполнении команды
$ cx nu
порожденный интерпретатор заменит "$1
" на первый аргумент "nu
". Рассмотрим всю последовательность операций:
$ echo 'chmod +x $1' >cx
Вначале создадим cx
$ sh cx сх
Сделать сам файл cx выполняемым
$ echo echo Hi, there! >hello
Приготовим тест
$ hello
Попробуем
hello: cannot execute
$ cx hello
Сделаем файл выполняемым
$ hello
Попробуем снова
Hi, there!
Работает
$ mv cx /usr/you/bin
Установим команду cx
$ rm hello
Уберем ненужное
$
Заметьте, что мы задали
$ sh cx сх
в точности так, как сделал бы автоматически интерпретатор, если бы cx
была выполняемой и можно было бы задать
$ cx сх
А как быть, если нужно работать с несколькими аргументами, например, заставить программу cx
воздействовать сразу на несколько файлов? Прямолинейное решение состоит в том, чтобы включить девять аргументов в командный файл:
chmod +x $1 $2 $3 $4 $5 $6 $7 $8 $9
(Это годится только для девяти аргументов, так как конструкция $10
распознается как "первый аргумент, за которым следует 0"!) Если пользователь такого командного файла задаст меньше девяти аргументов, то недостающие окажутся пустыми строками. Это приведет к тому, что только настоящие аргументы будут переданы chmod
порожденным интерпретатором. Такое решение, конечно, приемлемо, но не вполне корректно и не подходит для случая с числом аргументов более девяти.
С учетом упомянутой выше трудности интерпретатор предоставляет сокращенную запись $*
, означающую "все аргументы". В этом случае правильно определить cx
:
chmod +x $*
что является эффективным при любом числе аргументов.
Используя $*
в своем репертуаре, вы можете создать некоторые полезные командные файлы, такие, как lc
или m
:
$ cd /usr/you/bin
$ cat lc
#lc: подсчет числа строк в файлах
wc -l $*
$ cat m
#m: точный способ послать почту
mail $*
$
Обе команды можно осмысленно использовать и без аргументов. Если нет аргументов, $*
будет пустым, и wc
и mail
вообще не получат никаких аргументов. С аргументами или без них команда вызывается правильно:
$ lc /usr/you/bin/*
1 /usr/you/bin/cx
2 /usr/you/bin/lc
2 /usr/you/bin/m
1 /usr/you/bin/nu
2 /usr/you/bin/what
1 /usr/you/bin/where
9 total
$ ls /usr/you/bin | lc
6
$
Эти и другие команды, описываемые в настоящей главе, являются командами пользователя, т.е. вы создаете их для себя и помещаете в свой каталог /bin
, поэтому вряд ли они должны стать общедоступными. В гл. 5 мы исследуем вопрос создания общедоступных программ на языке shell
.
Аргументами командного файла не обязательно должны быть имена файлов. Рассмотрим в качестве примера поиск в каталоге, где хранится личный телефонный справочник. Если у вас есть файл с именем /usr/you/lib/phone-book
, содержащий строки следующего вида:
dial-a-joke 212-976-3838
dial-a-prayer 212-246-4200
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии