Позиционные параметры
9.2.1. Позиционные параметры
Позиционные параметры являются переменными в 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 позиционных параметров. В следующем пункте описан специальный параметр $*.