Позиционные параметры
Позиционные параметры являются переменными в shell программе. Их значение устанавливается из аргументов, указанных в командной строке, которая вызывает программу. Позиционные параметры нумеруются и на них ссылка идет с помощью символа $: $1, $2, $3 и т.д.
shell программа может использовать до 9 позиционных параметров. Если shell программа вызывается с помощью командной строки, подобной следующей:
shell.prog pp1 pp2 pp3 pp4 pp5 pp6 pp7 pp8 pp9 <CR>
то позиционному параметру $1 в программе присваивается значение pp1, $2 - значение pp2 и т.д. во время вызова программы. Чтобы практически рассмотреть это замещение позиционных параметров, создайте файл pp. Затем введите команды echo в файл pp. В результате выполнения команды cat получим следующий вывод:
$ cat pp<CR>
echo The first positional parameter is: $1<CR>
echo The second positional parameter is: $2<CR>
echo The third positional parameter is: $3<CR>
echo The fourth positional parameter is: $4<CR>
$
Если вы выполните эту shell программу с аргументами one, two, three, four, то получите результат (но вначале нужно сделать shell программу pp исполняемой с помощью команды chmod):
$ chmod u+x pp<CR>
$ $ pp one two three four<CR>
echo The first positional parameter is: one echo The second positional parameter is: two echo The third positional parameter is: three echo The fourth positional parameter is: four $
Команда who перечисляет всех пользователей, в данный момент зарегистрированных в системе. Можем создать простую программу whoson, которая будет сообщать, работает ли в настоящий момент конкретный пользователь. Введем в файл whoson командную строку:
who | grep $1<CR>
Команда who перечисляет всех текущих пользователей системы, а команда grep осуществляет поиск строки, содержащей значение, соответствующее позиционному параметру $1. Теперь подставим конкретное имя в качестве аргумента в файле whoson, например, sue. Когда вы зададите команду "whoson sue", shell программа заменит $1 на sue в вашей программе и выполнит ее в следующем виде:
who | grep sue<CR>
Вывод будет следующим:
$ whoson sue<CR>
sue tty26 Jan 24 13:35 $
Если указанный пользователь sue не зарегистрирован в данный момент в системе, grep завершится неудачно и whoson не будет ничего выводить на экран.
shell позволяет указывать в командной строке до 128 аргументов, но ссылаться можно не более, чем на 9 позиционных параметров. В следующем пункте описан специальный параметр $*.