Библиотека сайта rus-linux.net
Фундаментальные основы Linux. Часть VI. Сценарии
Оригинал: Linux FundamentalsАвтор: Paul Cobbaut
Дата публикации: 16 октября 2014 г.
Перевод: А.Панин
Дата перевода: 21 декабря 2014 г.
Глава 23. Параметры сценариев
Параметры сценария
bash
может принимать параметры. Нумерация, которую вы можете увидеть в сценарии ниже, может быть продолжена, если для работы сценария необходимо большее количество параметров. Также в вашем распоряжении имеются специальные параметры, содержащие значения, которые соответствуют количеству параметров, их строковому представлению, а также идентификатору процесса и последнему коду завершения процесса. Полный список специальных параметров размещен на странице руководства командной оболочки bash
.
#!/bin/bash echo Первым аргументом является $1 echo Вторым аргументом является $2 echo Третьим аргументом является $3 echo \$ $$ - идентификатор процесса (PID) интерпретатора сценария echo \# $# - количество аргументов echo \? $? - последний код завершения процесса echo \* $* - строковое представление всех аргументов
[paul@RHEL4a scripts]$ ./pars one two three Первым аргументом является one Вторым аргументом является two Третьим аргументом является three $ 5610 - идентификатор процесса (PID) интерпретатора сценария # 3 - количество аргументов ? 0 - последний код завершения процесса * one two three - строковое представление всех аргументов
[paul@RHEL4a scripts]$ ./pars 1 2 Первым аргументом является 1 Вторым аргументом является 2 Третьим аргументом является $ 5612 - идентификатор процесса (PID) интерпретатора сценария # 2 - количество аргументов ? 0 - последний код завершения процесса * 1 2 - строковое представление всех аргументов [paul@RHEL4a scripts]$
$0
. Параметр $0
содержит имя файла исполняющегося сценария.
paul@debian6~$ cat myname echo имя файла этого сценария $0 paul@debian6~$ ./myname имя файла этого сценария ./myname paul@debian6~$ mv myname test42 paul@debian6~$ ./test42 имя файла этого сценария ./test42
Обход списка параметров
shift
) позволяет произвести разбор всех переданных сценарию параметров
по очереди. Ниже представлен пример сценария с данным оператором.
kahlan@solexp11$ cat shift.ksh #!/bin/ksh if [ "$#" == "0" ] then echo Вы должны передать по крайней мере один параметр сценарию. exit 1 fi while (( $# )) do echo Вы передали сценарию параметр $1 shift done
kahlan@solexp11$ ./shift.ksh one Вы передали сценарию параметр one kahlan@solexp11$ ./shift.ksh one two three 1201 "33 42" Вы передали сценарию параметр one Вы передали сценарию параметр two Вы передали сценарию параметр three Вы передали сценарию параметр 1201 Вы передали сценарию параметр 33 42 kahlan@solexp11$ ./shift.ksh Вы должны передать по крайней мере один параметр сценарию.
Ввод в процессе исполнения сценария
read
в сценарии.
#!/bin/bash echo -n Введите число: read number
Задействование файла конфигурации
Команда source
(о которой говорилось в одной из глав, посвященных работе с командной оболочкой) может также использоваться для задействования файла конфигурации сценария.
[paul@RHEL4a scripts]$ cat myApp.conf # Файл конфигурации для приложения myApp # Путь myAppPath=/var/myApp # Количество приложений, осуществляющих саморепликацию quines=5
[paul@RHEL4a scripts]$ cat myApp.bash #!/bin/bash # # Добро пожаловать в приложение myApp # . ./myApp.conf echo Количество самовоспроизводящихся приложений: $quines
[paul@RHEL4a scripts]$ ./myApp.bash Количество самовоспроизводящихся приложений: 5 [paul@RHEL4a scripts]$
Получение параметров сценария с помощью функции getopts
getopts
позволяет осуществлять разбор параметров, передаваемых сценарию посредством командного интерфейса системы. Следующий сценарий позволяет использовать любую комбинацию параметров a, f и z.
kahlan@solexp11$ cat options.ksh #!/bin/ksh while getopts ":afz" option; do case $option in a) echo принят параметр -a ;; f) echo принят параметр -f ;; z) echo принят параметр -z ;; *) echo "некорректный параметр -$OPTARG" ;; esac done
kahlan@solexp11$ ./options.ksh kahlan@solexp11$ ./options.ksh -af принят параметр -a принят параметр -f kahlan@solexp11$ ./options.ksh -zfg принят параметр -z принят параметр -f некорректный параметр -g kahlan@solexp11$ ./options.ksh -a -b -z принят параметр -a некорректный параметр -b принят параметр -z
kahlan@solexp11$ cat argoptions.ksh #!/bin/ksh while getopts ":af:z" option; do case $option in a) echo принят параметр -a ;; f) echo принят параметр -f с аргументом $OPTARG ;; z) echo принят параметр -z ;; :) echo "вместе с параметром -$OPTARG должен быть передан аргумент" ;; *) echo "некорректный параметр -$OPTARG" ;; esac done
kahlan@solexp11$ ./argoptions.ksh -a -f hello -z принят параметр -a принят параметр -f с аргументом hello принят параметр -z kahlan@solexp11$ ./argoptions.ksh -zaf 42 принят параметр -z принят параметр -a принят параметр -f с аргументом 42 kahlan@solexp11$ ./argoptions.ksh -zf принят параметр -z вместе с параметром -f должен быть передан аргумент
Получение параметров функционирования командной оболочки с помощью команды shopt
shopt
. В примере ниже сначала осуществляется проверка того, установлено ли значение переменной cdspell; оказывается, что оно не установлено. После этого с помощью команды shopt осуществляется установка значения данной переменной, а третья команда, в составе которой используется команда shopt, предназначается для проверки того, действительно ли была осуществлена установка значения рассматриваемой переменной. После установки значения данной переменной вы можете допускать незначительные опечатки в ходе использования команды cd. Страница руководства командной оболочки bash содержит полный список допустимых переменных.
paul@laika:~$ shopt -q cdspell ; echo $? 1 paul@laika:~$ shopt -s cdspell paul@laika:~$ shopt -q cdspell ; echo $? 0 paul@laika:~$ cd /Etc /etc
Практическое задание: параметры сценариев и специальные переменные
-
1. Разработайте сценарий, который будет принимать четыре параметра и выводить их в обратном порядке.
-
2. Разработайте сценарий, который будет принимать два параметра (два имени файла) и выводить информацию о том, существуют ли эти файлы.
-
3. Разработайте сценарий, который будет предлагать пользователю ввести имя файла. Этот сценарий должен проверять наличие файла, принадлежность файла вам, а также возможность записи в файл. В случае отсутствия возможности записи в файл он должен выполнять все необходимые действия для того, чтобы такая возможность появилась.
-
4. Создайте конфигурационный файл для предыдущего сценария. Объявите в рамках данного конфигурационного файла логическую переменную, которая позволит управлять функцией журналирования, заключающейся в записи подробной информации обо всех выполняемых сценарием действиях в файл журнала, который расположен в директории /tmp.
Корректная процедура выполнения практического задания: параметры сценариев и специальные переменные
-
1. Разработайте сценарий, который будет принимать четыре параметра и выводить их в обратном порядке.
-
echo $4 $3 $2 $1
-
2. Разработайте сценарий, который будет принимать два параметра (два имени файла) и выводить информацию о том, существуют ли эти файлы.
-
#!/bin/bash if [ -f $1 ] then echo файл $1 существует! else echo файл $1 не найден! fi if [ -f $2 ] then echo файл $2 существует! else echo файл $2 не найден! fi
-
3. Разработайте сценарий, который будет предлагать пользователю ввести имя файла. Этот сценарий должен проверять наличие файла, принадлежность файла вам, а также возможность записи в файл. В случае отсутствия возможности записи в файл он должен выполнять все необходимые действия для того, чтобы такая возможность появилась.
-
4. Создайте конфигурационный файл для предыдущего сценария. Объявите в рамках данного конфигурационного файла логическую переменную, которая позволит управлять функцией журналирования, заключающейся в записи подробной информации обо всех выполняемых сценарием действиях в файл журнала, который расположен в директории /tmp.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Глава 22. Циклы в сценариях | Глава 24. Дополнительная информация о сценариях |