echo "This ls the second parameter : $2"
echo "This ls the third parameter : $3"
echo "This ls the fourth parameter : $4"
echo "This ls the fifth parameter : $5"
echo "This ls the sixth parameter : S6"
echo "This ls the seventh parameter : $7"
echo "This ls the eighth parameter : $8"
echo "This ls the ninth parameter : $9"
$ param Did You See The Full Moon
This ls the script name : ./param
This ls the first parameter : Did
This ls the second parameter : You
This ls the third parameter : See
This ls the fourth parameter : The
This ls the fifth parameter : Full
This ls the sixth parameter : Moon
This ls the seventh parameter :
This ls the eighth parameter :
This ls the ninth parameter :
Если передаются шесть параметров, седьмой, восьмой и девятый будут пустыми, чего и следовало ожидать. Обратите внимание, что первый параметр содержит название сценария. Этот параметр удобно использовать, если сценарий выдает сообщение об ошибках. Ниже приводится другой пример, где получается название: сценария.
$ pg param2 .
#!/bin/sh
echo "Hello world this ls $0 calling"
$ param2
Hello world this ls ./param2 calling
Заметьте, что параметр $0 также позволяет получить путь доступа к текущему каталогу. Для получения названия сценария предварите параметр $0 командой
basename.
$ pg param2
#!/bin/sh
echo "Hello world this ls `basename $0` calling"
$ param2
Hello world this ls param2 calling
Параметры можно передавать внутри сценария в системную команду. В следующем примере используется команда find . Параметр $1 указывает имя искомого файла.
$ pg findfile
#!/bin/sh
# findfile
find / -name $1 -print
$ findfile passwd
/etc/passwd
/etc/uucp/passwd
/usr/bin/passwd
Ниже приводится другой пример. В виде параметра $1 файл user‑id передается команде grep; команда grep использует эти сведения для поиска файла passwd, где содержится полное имя пользователя.
$ pg who_is
#!/bin/sh
# who_is
grep $1 passwd | awk -F: {print $4}'
$ who_is seany
Seany Post
Теперь, когда вы изучили, как получить доступ к параметрам shell–сценариев и применять их, было бы полезным узнать об этих параметрах больше. Рассмотрим, каким образом сценарий применяет специальные параметры. Существует семь специальных параметров, которые представлены в табл. 14.2.
Таблица 14.2. Специальные параметры интерпретатора shell
$# | Число аргументов, передаваемых сценарию |
$* | В отдельной строке отображаются все аргументы, которые передаются сценарию. Здесь может содержаться более девяти параметров, в отличие от позиционных параметров |
$$ | Текущий идентификатор PID для выполняющегося сценария |
$! | Идентификатор PID для последнего процесса, который выполняется в фоновом режиме |
$@ | Означает то же самое, что и параметр $#, но, если параметр заключен в кавычки, то и каждый аргумент отображается в кавычках |
$- | Отображение текущих опций интерпретатора команд; аналогично применению команды set |
$? | Показывает код завершения последней команды. Значение 0 свидетельствует об отсутствии ошибок, любое другое значение -o, их наличии |
Преобразуем сценарий param, применяя некоторые специальные параметры. Затем выполним сценарий.
$ pg param
#!/bin/sh