Хотите писать навороченные сценарии и стать экспертом в написании скриптов оболочки? Тогда этот пост для вас ;)
В Linux/Unix когда вы запускаете скрипт или команду, они завершатся со значимым статусом для того чтобы вы поняли - достигли ли вы своей цели запуская их или нет. Тем самым мы можем предпринять какие-то действия по статусу завершения (выполнено, провалено или выполнено частично) этих команд. В linux есть некоторые команды, которые не отображают статус завершения, например команда "mount -a" которую мы выполняем после правки файла fstab не покажет вам ничего. Так как же мы узнаем что команда отработала и на сколько успешно? Для этого в Linux/Unix есть встроенная переменная которая хранит статус завершения для любой команды или запущенного скрипта. Этот статус хранится во встроенной переменно "$?". Статус завершения принимает значение от 0 до 255. Некоторые из обычно используемых статусов завершения приведены ниже.
1 2 3 4 5 6 7 8 9 | 0 Успешное выполнение команды 1 Команда завершилась неудачей во время расширения или перенаправления, статус завершения больше ноля. 2 Некорректное использование команды 126 Команда найдена, но не выполнена 127 Команда не найдена |
Несколько примеров того, как использовать статусы завершения.
Как можно использовать статус завершения для проверки команды? Запустите команду которую хотите проверить, затем выполните команду
echo $?
для проверки статус выполнения команды.
Пример 1:
1 2 3 4 | mirivlad@mirivlad:~⟫ ls New.doc mirivlad@mirivlad:~⟫ echo $? 0 |
Если вы получили статус завершения равный нулю, то команды была выполнена успешно.
Как можно использовать статус завершения в сценариях оболочки?
Пример 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 | ls -lrt if [ $? -eq 0 ] then echo "команда ls -lrt выполнена успешно" else echo "команда ls -lrt не выполнена правильно, и статус завершения : $?" fi |