Отметим, что в сообщении, выдаваемом интерпретатором, всегда указывается имя неопределенной переменной.
В другой конструкции ${var-thing}
выбирается $var
, если оно определено, и thing
— в противном случае. В подобной конструкции ${var-thing}
значение $var
также устанавливается равным thing
:
$ echo ${junk-'Hi there'}
Hi there
$ echo ${junk?)
junk: parameter not set
значение junk не изменилось
$ echo {junk='Hi there'}
Hi there
$ echo ${junk?}
Hi there
junk принял значение Hi there
$
Правила получения значений переменных приведены в табл. 5.3. Возвращаясь к нашему исходному примеру
t=${1-60}
видим, что t
присваивается $1
или 60, если аргумент не задан.
$var | Значение var ; ничего, если var не определено |
${var} | То же; полезно, если за именем переменной следует буквенно-цифровая строка |
${var-thing} | Значение var , если оно определено; в противном случае — thing ; $var не изменяется |
${var=thing} | Значение var , если оно определено; в противном случае — thing . Если var не определено, то $var присваивается thing |
${var?строка} | Если var определено — $var ; в противном случае выводится строка и интерпретатор прекращает работу. При пустой строке выводится: var: parameter not set |
${var+thing} | thing , если $var определено; в противном случае — ничего |
Таблица 5.3: Получение значений переменных в языке
Обратите внимание на реализацию команд true
и false
в /usr/bin
или /bin
. (Как бы вы определили, где они находятся?)
Измените команду watchfor
так, чтобы пользователь мог задавать несколько имен, а не вводить 'joe|mary'
.
Напишите версию команды watchwho
, которая использует команду comm
вместо awk
для сравнения новой и старой информации. Какая версия вам больше нравится?
Напишите версию команды watchwho
, в которой вывод команды who
хранится в переменных языка shell
, а не в файлах. Какая версия лучше? Какая версия быстрее работает? Следует ли в командах watchwho
и checkmail
автоматически использовать операцию &
?
В чем состоит различие между пустой командой языка shell
: и символом примечания #
? Нужны ли они?
5.4 Команда trap
: обработка прерываний
Если во время выполнения команды watchwho
нажать клавишу /tmp
. Команда watchwho
удаляет временные файлы перед окончанием своей работы. Необходимы средства обнаружения таких ситуаций и восстановления после прерывания.
При нажатии клавиши &
, от прерываний, но не от отключений.
В гл. 7 сигналы рассматриваются подробнее, но для работы с ними на языке shell
глубоких знаний не требуется. Встроенная команда интерпретатора trap
устанавливает последовательность команд, которая должна выполняться при возникновении сигнала:
trap последовательность_команд список_номеров_сигналов
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии