В этом руководстве вы узнаете, как проверить код выхода последней команды bash и некоторые возможные варианты ее использования.
Код выхода из Bash
Каждая команда UNIX / Linux, выполняемая сценарием оболочки или пользователем, оставляет статус выхода. Это целое число, которое остается неизменным, пока не будет запущена следующая команда. Если код выхода равен 0, значит, команда выполнена успешно. Если код выхода не равен нулю (1-255), это означает ошибку.
Есть много потенциальных вариантов использования кода выхода из bash. Самым очевидным из них, конечно же, является проверка правильности выполнения последней команды, особенно если команда не генерирует никаких выходных данных.
В случае bash код выхода предыдущей команды доступен с помощью переменной оболочки “$?”.
Проверка кода выхода из Bash
Запустите терминал и выполните любую команду.
$ датаПроверьте значение переменной оболочки «$?”Для кода выхода.
$ echo $?
Поскольку команда «date» выполнена успешно, код выхода равен 0. Что было бы, если бы произошла ошибка?
Попробуем запустить команду, которой не существует.
$ abcdПроверить код выхода.
$ echo $?
Это ненулевое значение, указывающее на то, что предыдущая команда не выполнялась должным образом.
Теперь взгляните на следующую команду:
$ cat образец.txt | grep «монета»
При работе с командой, имеющей один или несколько каналов, код выхода будет последним кодом, выполненным в канале. В данном случае это команда grep.
Поскольку команда grep была успешной, она будет равна 0.
$ echo $?
В этом примере, если команда grep завершилась неудачно, код выхода будет отличным от нуля.
$ cat образец.txt | grep «abcd»$ echo $?
Включение кода выхода в скрипты
Код выхода также можно использовать для написания скриптов. Один простой способ использовать его - назначить его переменной оболочки и работать с ней. Вот пример сценария оболочки, который использует код выхода в качестве условия для печати определенного вывода.
$ #!/ bin / bash$ echo "привет, мир"
$ status = $?
$ [$ status -eq 0] && echo "команда выполнена успешно" || echo "команда не выполнена"
При запуске скрипт выдаст следующий вывод.
Теперь давайте посмотрим, что произойдет, если будет запущена недопустимая команда.
$ #!/ bin / bash$ random-command
$ status = $?
$ [$ status -eq 0] && echo "команда выполнена успешно" || echo "команда не выполнена"
При запуске вывод будет другим.
Код выхода Значение Описание
Когда код выхода не равен нулю, значение варьируется от 1 до 255. Теперь, что означает это значение?
Хотя значение ограничено, объяснение каждого значения уникально для программы / сценария. Например, «ls» и «grep» по-разному объясняют коды ошибок 1 и 2.
$ man ls$ man grep
Определение статуса выхода в скрипте
При написании скрипта мы можем определить пользовательские значения кода выхода. Это полезный метод для упрощения отладки. В сценариях bash это команда «exit», за которой следует значение кода выхода.
$ exitСогласно соглашению, рекомендуется присвоить код выхода 0 для успешного выполнения и использовать остальные (1-255) для возможных ошибок. При достижении команды выхода выполнение сценария оболочки будет прекращено, поэтому будьте осторожны с его размещением.
Взгляните на следующий сценарий оболочки. Здесь, если условие выполнено, скрипт завершится с кодом выхода 0. Если условие не выполняется, код выхода будет 1.
$ #!/ bin / bash$ if [["$ (whoami)" != корень]]; тогда
$ echo "Пользователь не root."
$ exit 1
$ fi
$ echo "пользователь root"
$ exit 0
Проверьте результат выполнения этого сценария без привилегий sudo или пользователя «root».
$ ./образец.ш$ echo $?
Последние мысли
В этом руководстве показано, что такое коды выхода и как их использовать. Он также демонстрирует, как назначить соответствующие коды выхода в сценарии bash.
Заинтересованы в сценариях bash? Один из самых простых способов начать - написать свои собственные скрипты. Ознакомьтесь с этим простым руководством о том, как написать простой сценарий bash.
Удачных вычислений!