Команда shift
$2 становится параметром $1, параметр $3 — $2 и т.д. Предыдущее значение параметра $1 отбрасывается, а значение параметра $0 остается неизменным. Если в вызове команды shift задан числовой параметр, параметры сдвигаются на указанное количество позиций. Остальные переменные $*, $@ и $# также изменяются в связи с новой расстановкой переменных-параметров.Команда shift
shift для обращения к 10-му параметру и следующим за ним.Например, вы можете просмотреть все позиционные параметры:
#!/bin/sh
while [ "$1" != "" ]; do
echo "$1"
shift
done
exit 0
Команда trap
#include с опущенным префиксом SIG. Для того чтобы посмотреть номера сигналов и соответствующие им имена, можно ввести в командной строке команду trap -l.Для тех, кто не знаком с сигналами, это события, асинхронно посылаемые программе. Стандартно они обычно вызывают прекращение выполнения программы.
С помощью команды trap
trap
Напоминаем, что обычно сценарии обрабатываются интерпретатором сверху вниз, поэтому вы должны задать, команду trap
Для возврата к стандартной реакции на сигнал, просто задайтекоманду
-. Для игнорирования сигнала задайте вкоманде''. Команда trap без параметров выводит текущий список перехватов и действий.В табл. 2.9 перечислены самые важные, включенные в. стандарт Х/Open сигналы, которые можно отследить (со стандартными номерами в скобках). Дополнительную информацию можно найти на страницах раздела 7 интерактивного справочного руководства, посвященного сигналам (man 7 signal
| Сигнал | Описание |
|---|---|
HUP (1) | Неожиданный останов; обычно посылается, когда отключается терминал или пользователь выходит из системы |
INT (2) | Прерывание; обычно посылается нажатием комбинации клавиш |
QUIT (3) | Завершение выполнения; обычно посылается нажатием комбинации клавиш |
ABRT (6) | Аварийное завершение; обычно посылается при возникновении серьезной ошибки выполнения |
ALRM (14) | Аварийный сигнал; обычно посылается для обработки превышений лимита времени |
TERM (15) | Завершение; обычно посылается системой, когда она завершает работу |
А теперь выполните упражнение 2.15.
В следующем сценарии показана простая обработка сигнала.
#!/bin/sh
trap 'rm -f /tmp/my_tmp_file_$$' INT
echo creating file /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$
echo "press interrupt (CTRL-C) to interrupt..."
while [ -f /tmp/my_tmp_file_$$ ] ; do
echo File exists
sleep 1
done
echo The file no longer exists trap INT
echo creating file /tmp/my_tmp_file_$$
date > /tmp/my_tmp_file_$$
echo "press interrupt (CTRL-C) to interrupt..."
while [ -f /tmp/my_tmp_file_$$ ]; do
echo File exists
sleep 1
done
echo we never get here
exit 0
Если вы выполните этот сценарий, нажимая и удерживая нажатой клавишу