Использование кодов выхода
Коды статуса выхода (exit status codes) — это числовые значения, возвращаемые командой или скриптом, чтобы указать, был ли его выполнение успешным. В системах Linux и Unix-подобных:
- Код статуса выхода
0 означает успешное выполнение.
- Ненулевой код статуса выхода (от 1 до 255) указывает на ошибку или иное исключительное состояние.
Давайте создадим скрипт, который использует разные коды статуса выхода в зависимости от определенных условий.
Сначала создайте новый файл скрипта:
cd ~/project
touch status_codes.sh
Откройте файл с помощью nano:
nano status_codes.sh
Добавьте следующее содержимое:
#!/bin/bash
## Demonstrating exit status codes
## Check if a filename was provided as an argument
if [ $## -eq 0 ]; then
echo "Error: No filename provided"
echo "Usage: $0 <filename>"
## Exit with status 1 (general error)
exit 1
fi
filename=$1
## Check if the file exists
if [ ! -f "$filename" ]; then
echo "Error: File '$filename' not found"
## Exit with status 2 (file not found)
exit 2
fi
## Check if the file is readable
if [ ! -r "$filename" ]; then
echo "Error: File '$filename' is not readable"
## Exit with status 3 (permission denied)
exit 3
fi
## If we get here, everything is fine
echo "File '$filename' exists and is readable"
## Exit with status 0 (success)
exit 0
Сохраните файл (Ctrl+O, Enter) и выйдите из nano (Ctrl+X).
Сделайте скрипт исполняемым:
chmod +x status_codes.sh
Теперь давайте протестируем этот скрипт в разных сценариях.
Сначала запустите скрипт без аргументов:
./status_codes.sh
Вы должны увидеть:
Error: No filename provided
Usage: ./status_codes.sh <filename>
Скрипт завершился с кодом статуса 1. Вы можете проверить код статуса выхода последней выполненной команды с помощью специальной переменной $?:
echo $?
Вы должны увидеть:
1
Теперь создадим тестовый файл и запустим скрипт снова:
echo "This is a test file" > testfile.txt
./status_codes.sh testfile.txt
Вы должны увидеть:
File 'testfile.txt' exists and is readable
Проверьте код статуса выхода:
echo $?
Вы должны увидеть:
0
Это означает, что скрипт выполнился успешно.
Наконец, попробуйте запустить скрипт с несуществующим файлом:
./status_codes.sh nonexistent_file.txt
Вы должны увидеть:
Error: File 'nonexistent_file.txt' not found
Проверьте код статуса выхода:
echo $?
Вы должны увидеть:
2
Это показывает, как можно использовать разные коды статуса выхода для указания различных типов ошибок.