From 2ef62d5c4ab4215fd96772111090d677fa552b73 Mon Sep 17 00:00:00 2001 From: gandc Date: Tue, 10 Dec 2024 21:14:56 +0300 Subject: [PATCH] error occured check --- script | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/script b/script index 0f45654..dba39b0 100644 --- a/script +++ b/script @@ -1,11 +1,11 @@ #!/bin/bash -# Обработка аргументов через getopts LOG_FILE="" ERR_FILE="" SHOW_USERS=0 SHOW_PROCESSES=0 SHOW_HELP=0 +ERROR_OCCURRED=0 # Функция отображения справки display_help() { @@ -16,7 +16,6 @@ display_help() { echo " -l, --log PATH Redirect output to a specified file" echo " -e, --errors PATH Redirect error output to a specified file" echo " -h, --help Show this message and terminate" - } # Проверка доступности пути @@ -30,8 +29,6 @@ check_path() { return 0 } - - # Ручная обработка аргументов для раннего перенаправления for ((i = 1; i <= $#; i++)); do if [[ ${!i} == "-e" || ${!i} == "--errors" ]]; then @@ -46,16 +43,17 @@ if [[ -n "$ERR_FILE" ]]; then if ! check_path "$ERR_FILE"; then exit 1 fi - #echo "Redirecting errors to $ERR_FILE" >&2 exec 2>"$ERR_FILE" fi -# Парсинг аргументов через getopt +# Парсинг аргументов через getopt с фиксацией ошибок PARSED=$(getopt -o hupl:e: --long help,users,processes,log:,errors: -- "$@" 2>&1) -if [[ $? -ne 0 ]]; then - # Если getopt вернул ошибку, перенаправляем её в stderr +GETOPT_STATUS=$? + +if [[ $GETOPT_STATUS -ne 0 ]]; then + ERROR_OCCURRED=1 echo "$PARSED" >&2 - display_help + display_help >&2 exit 1 fi @@ -90,20 +88,21 @@ while true; do break ;; *) + ERROR_OCCURRED=1 echo "Invalid option: $1" >&2 - display_help + display_help >&2 exit 1 ;; esac done - # Настройка вывода в лог-файлы - if [[ -n "$LOG_FILE" ]]; then - if ! check_path "$LOG_FILE"; then - exit 1 - fi - exec 1>"$LOG_FILE" +# Настройка вывода в лог-файл +if [[ -n "$LOG_FILE" ]]; then + if ! check_path "$LOG_FILE"; then + exit 1 fi + exec 1>"$LOG_FILE" +fi # Основная логика main() { @@ -112,12 +111,11 @@ main() { exit 0 fi - - # Выполнение запрошенных действий if [[ $SHOW_USERS -eq 1 && $SHOW_PROCESSES -eq 1 ]]; then + ERROR_OCCURRED=1 echo "Error: Cannot use both -u and -p options simultaneously." >&2 - display_help + display_help >&2 exit 1 fi @@ -127,18 +125,21 @@ main() { elif [[ $SHOW_PROCESSES -eq 1 ]]; then list_processes else + ERROR_OCCURRED=1 echo "Error: No action specified." >&2 - display_help + display_help >&2 exit 1 fi + + if [[ $ERROR_OCCURRED -eq 0 ]]; then + echo "Execution completed successfully. No errors occurred." >&2 + fi } -# Функция для вывода списка пользователей list_users() { awk -F: '{print $1, $6}' /etc/passwd | sort } -# Функция для вывода списка процессов list_processes() { ps -eo pid,comm --sort=pid }