error occured check

This commit is contained in:
gandc 2024-12-10 21:14:56 +03:00
parent 802556e778
commit 2ef62d5c4a
Signed by: gandc
GPG Key ID: 9F77B03D43C42CB4

45
script
View File

@ -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
}