Код завершения

We use cookies. Read the Privacy and Cookie Policy

Команды (включая сценарии и функции, написанные нашими собственными руками) по завершении работы возвращают системе значение, которое называют кодом завершения (exit status). Это значение — целое число в диапазоне от 0 до 255 — сообщает об успешном или неуспешном завершении команды. По соглашениям значение 0 служит признаком успешного завершения, а любое другое — не­успешного. Командная оболочка поддерживает переменную, посредством которой можно определить код завершения. Например:

[me@linuxbox ~]$ ls -d /usr/bin

/usr/bin

[me@linuxbox ~]$ echo $?

0

[me@linuxbox ~]$ ls -d /bin/usr

ls: cannot access /bin/usr: No such file or directory

[me@linuxbox ~]$ echo $?

2

В этом примере мы дважды выполнили команду ls. В первый раз команда выполнилась благополучно. Если вывести значение переменной $?, можно увидеть, что оно равно 0. Во второй раз команда ls сообщила об ошибке, а переменная $? содержала значение 2, указывающее, что команда столкнулась с ошибкой. Одни команды используют разные коды завершения, чтобы сообщить о характере ошибки, тогда как другие, столкнувшись с любой ошибкой, просто возвращают значение 1. Страницы справочного руководства часто включают раздел с заголовком «Exit Status» («Коды завершения»), описывающий возвращаемые коды. Однако 0 всегда служит признаком успешного выполнения.

Командной оболочкой поддерживаются две чрезвычайно простые встроенные коман­ды, которые просто завершаются с кодом 0 или 1. Команда true всегда завершается с признаком успеха, а команда false — всегда с признаком ошибки:

[me@linuxbox ~]$ true

[me@linuxbox ~]$ echo $?

0

[me@linuxbox ~]$ false

[me@linuxbox ~]$ echo $?

1

Эти команды можно использовать для исследования особенностей работы инструкции if. Инструкция if в действительности просто оценивает код завершения команды:

[me@linuxbox ~]$ if true; then echo "It's true."; fi

It's true.

[me@linuxbox ~]$ if false; then echo "It's true."; fi

[me@linuxbox ~]$

Команда echo "It's true." выполняется, только если команда, следующая за if, завершается успешно, и не выполняется, если команда, следующая за if, завершается с признаком ошибки. Если за if следует список команд, успешность выполнения всего списка определяется по последней команде:

[me@linuxbox ~]$ if false; true; then echo "It's true."; fi

It's true.

[me@linuxbox ~]$ if true; false; then echo "It's true."; fi

[me@linuxbox ~]$