Чтение онлайн

ЖАНРЫ

Искусство программирования на языке сценариев командной оболочки

Купер Мендель

Шрифт:

if [ -n "${10}" ] # Параметры, следующие за $9 должны заключаться в фигурные скобки

then

echo "Параметр #10: ${10}"

fi

echo "-----------------------------------"

echo "Все аргументы командной строки: "$*""

if [ $# -lt "$MINPARAMS" ]

then

echo

echo "Количество

аргументов командной строки должно быть не менее $MINPARAMS !"

fi

echo

exit 0

Скобочная нотация позиционных параметров дает довольно простой способ обращения к последнему аргументу, переданному в сценарий из командной строки. Такой способ подразумевает использование косвенной адресации.

args=$# # Количество переданных аргументов.

lastarg=${!args} # Обратите внимание: lastarg=${!$#} неприменимо.

В сценарии можно предусмотреть различные варианты развития событий, в зависимости от имени сценария. Для этого сценарий должен проанализировать аргумент $0– - имя файла сценария. Это могут быть и имена символических ссылок на файл сценария.

Если сценарий ожидает передачи аргументов в командной строке, то при их отсутствии он получит "пустые" переменные, что может вызвать нежелательный побочный эффект. Один из способов борьбы с подобными ошибками -- добавить дополнительный символ в обеих частях операции присваивания, где используются аргументы командной строки.

variable1_=$1_

# Это предотвратит появление ошибок, даже при отсутствии входного аргумента.

critical_argument01=$variable1_

# Дополнительные символы всегда можно "убрать" позднее.

# Это может быть сделано примерно так:

variable1=${variable1_/_/} # Побочный эффект возникает только если имя переменной

# $variable1_ будет начинаться с символа "_".

# Здесь используется один из вариантов подстановки параметров, обсуждаемых в Главе 9.

# Отсутствие шаблона замены приводит к удалению.

# Более простой способ заключается

#+ в обычной проверке наличия позиционного параметра.

if [ -z $1 ]

then

exit $POS_PARAMS_MISSING

fi

– --

Пример 4-6. wh, whois выяснение имени домена

#!/bin/bash

# Команда 'whois domain-name' выясняет имя домена на одном из 3 серверов:

# ripe.net, cw.net, radb.net

# Разместите этот скрипт под именем 'wh'

в каталоге /usr/local/bin

# Требуемые символические ссылки:

# ln -s /usr/local/bin/wh /usr/local/bin/wh-ripe

# ln -s /usr/local/bin/wh /usr/local/bin/wh-cw

# ln -s /usr/local/bin/wh /usr/local/bin/wh-radb

if [ -z "$1" ]

then

echo "Порядок использования: `basename $0` [domain-name]"

exit 65

fi

case `basename $0` in

# Проверка имени скрипта и, соответственно, имени сервера

"wh" ) whois $1@whois.ripe.net;;

"wh-ripe") whois $1@whois.ripe.net;;

"wh-radb") whois $1@whois.radb.net;;

"wh-cw" ) whois $1@whois.cw.net;;

* ) echo "Порядок использования: `basename $0` [domain-name]";;

esac

exit 0

– --

Команда shift "сдвигает" позиционные параметры, в результате чего парметры "сдвигаются" на одну позицию влево.

$1 <--- $2, $2 <--- $3, $3 <--- $4, и т.д.

Прежний аргумент $1 теряется, но аргумент $0 (имя файла сценария) остается без изменений. Если вашему сценарию передается большое количество входных аргументов, то команда shift позволит вам получить доступ к аргументам, с порядковым номером больше 9, без использования {фигурных скобок}.

Пример 4-7. Использование команды shift

#!/bin/bash

# Использование команды 'shift' с целью перебора всех аргументов командной строки.

# Назовите файл с этим сценарием, например "shft",

#+ и вызовите его с набором аргументов, например:

# ./shft a b c def 23 skidoo

until [ -z "$1" ] # До тех пор пока не будут разобраны все входные аргументы...

do

echo -n "$1 "

shift

done

echo # Дополнительная пустая строка.

exit 0

Команда shift может применяться и к входным аргументам функций. См. Пример 33-10.

Глава 5. Кавычки

Поделиться с друзьями: