Примеры использования awk в сценариях командной оболочки, вы найдете в:
1. Пример 11-10
2. Пример 16-7
3. Пример 12-24
4. Пример 33-3
5. Пример 9-22
6. Пример 11-16
7. Пример 27-1
8. Пример 27-2
9. Пример 10-3
10. Пример 12-42
11. Пример 9-26
12. Пример 12-3
13. Пример 9-12
14. Пример 33-11
15. Пример 10-8
Это все, что я хотел рассказать об awk. Дополнительные ссылки на информацию об awk, вы найдете в разделе Литература .
Приложение C. Коды завершения, имеющие предопределенный смысл
Таблица C-1. "Зарезервированные" коды завершения
Код завершения |
Смысл |
Пример |
Примечание |
1 |
разнообразные ошибки |
let "var1 = 1/0" |
различные ошибки, такие как "деление на ноль" и пр. |
2 |
согласно документации к Bash -- неверное использование встроенных команд |
|
Встречаются довольно редко, обычно код завершения возвращается равным 1 |
126 |
вызываемая команда не может быть выполнена |
|
возникает из-за проблем с правами доступа или когда вызван на исполнение неисполняемый файл |
127 |
"команда не найдена" |
|
Проблема связана либо с переменной окружения $PATH, либо с неверным написанием имени команды |
128 |
неверный аргумент команды exit |
exit 3.14159 |
команда exitможет принимать только целочисленные значения, в диапазоне 0 - 255 |
128+n |
фатальная ошибка по сигналу "n" |
kill -9$PPID сценария |
$?вернет 137 (128 + 9) |
130 |
завершение по Control-C |
|
Control-C -- это выход по сигналу 2, (130 = 128 + 2, см. выше) |
255* |
код завершения вне допустимого диапазона |
exit -1 |
exitможет принимать только целочисленные значения, в диапазоне 0 - 255 |
Согласно этой таблице, коды завершения 1 - 2, 126 - 165 и 255 [ 67 ] Указание кода завершения за пределами установленного диапазона, приводит к возврату ошибочных кодов. Например, exit 3809 в
имеют предопределенное значение, поэтому вам следует избегать употребления этих кодов для своих нужд. Завершение сценария с кодом возврата exit 127, может привести в замешательство при поиске ошибок в сценарии (действительно ли он означает ошибку "команда не найдена"? Или это предусмотренный программистом код завершения?). В большинстве случаев, программисты вставляют exit 1, в качестве реакции на ошибку. Так как код завершения 1 подразумевает целый "букет" ошибок, то в данном случае трудно говорить о какой либо двусмысленности, хотя и об информативности -- тоже.
Не раз предпринимались попытки систематизировать коды завершения (см. /usr/include/sysexits.h), но эта систематизация предназначена для программистов, пишущих на языках C и C++. Автор документа предлагает ограничить коды завершения, определяемые пользователем, диапазоном 64 - 113 (и, само собой разумеется -- 0, для обозначения успешного завершения), в соответствии со стандартом C/C++. Это сделало бы поиск ошибок более простым.
Все сценарии, прилагаемые к данному документу, приведены в соответствие с этим стандартом, за исключением случаев, когда существуют отменяющие обстоятельства, например в Пример 9-2.
Обращение к переменной $?, из командной строки, после завершения работы сценария, дает результат, в соответствии с таблицей, приведенной выше, но только для Bash или sh . Под управлением csh или tcsh значения могут в некоторых случаях отличаться.
Приложение D. Подробное введение в операции ввода-вывода и перенаправление ввода-вывода
написано Stephane Chazelas и дополнено автором документа
Практически любая команда предполагает доступность 3-х файловых дескрипторов. Первый -- 0 (стандвртный ввод, stdin), доступный для чтения. И два других -- 1 (stdout) и 2 (stderr), доступные для записи.
Запись, типа ls 2>&1, означает временное перенаправление вывода, с устройства stderr на устройство stdout.
В соответствии с соглашениями, команды принимают ввод из файла с дескриптором 0 (stdin), выводят результат работы в файл с дескриптором 1 (stdout), а сообщения об ошибках -- в файл с дескриптором 2 (stderr). Если какой либо из этих трех дескрипторов окажется закрытым, то могут возникнуть определенные проблемы:
bash$ cat /etc/passwd >&-
cat: standard output: Bad file descriptor
К примеру, когда пользователь запускает xterm, то он сначала выполняет процедуру инициализации, а затем, перед запуском командной оболочки, xtermтрижды открывает терминальные устройства (/dev/pts/, или нечто подобное).
Читать дальше