diff --git a/script b/script index 4294315..0f45654 100644 --- a/script +++ b/script @@ -30,19 +30,11 @@ check_path() { return 0 } -# Функция для вывода списка пользователей -list_users() { - awk -F: '{print $1, $6}' /etc/passwd | sort -} -# Функция для вывода списка процессов -list_processes() { - ps -eo pid,comm --sort=pid -} # Ручная обработка аргументов для раннего перенаправления for ((i = 1; i <= $#; i++)); do - if [[ ${!i} == "-e" ]]; then + if [[ ${!i} == "-e" || ${!i} == "--errors" ]]; then next=$((i + 1)) ERR_FILE=${!next} break @@ -58,39 +50,53 @@ if [[ -n "$ERR_FILE" ]]; then exec 2>"$ERR_FILE" fi -# Парсинг аргументов через getopts -while getopts ":hupl:e:" opt; do - case "$opt" in - h) +# Парсинг аргументов через getopt +PARSED=$(getopt -o hupl:e: --long help,users,processes,log:,errors: -- "$@" 2>&1) +if [[ $? -ne 0 ]]; then + # Если getopt вернул ошибку, перенаправляем её в stderr + echo "$PARSED" >&2 + display_help + exit 1 +fi + +# Преобразование параметров после обработки getopt +eval set -- "$PARSED" + +# Обработка аргументов +while true; do + case "$1" in + -h|--help) SHOW_HELP=1 + shift ;; - u) + -u|--users) SHOW_USERS=1 + shift ;; - p) + -p|--processes) SHOW_PROCESSES=1 + shift ;; - l) - LOG_FILE="$OPTARG" + -l|--log) + LOG_FILE="$2" + shift 2 ;; - e) - ERR_FILE="$OPTARG" + -e|--errors) + ERR_FILE="$2" + shift 2 + ;; + --) + shift + break ;; *) - echo "Invalid option: -$OPTARG" >&2 + echo "Invalid option: $1" >&2 display_help exit 1 ;; esac done -# Основная логика -main() { - if [[ $SHOW_HELP -eq 1 ]]; then - display_help - exit 0 - fi - # Настройка вывода в лог-файлы if [[ -n "$LOG_FILE" ]]; then if ! check_path "$LOG_FILE"; then @@ -99,6 +105,15 @@ main() { exec 1>"$LOG_FILE" fi +# Основная логика +main() { + if [[ $SHOW_HELP -eq 1 ]]; then + display_help + exit 0 + fi + + + # Выполнение запрошенных действий if [[ $SHOW_USERS -eq 1 && $SHOW_PROCESSES -eq 1 ]]; then echo "Error: Cannot use both -u and -p options simultaneously." >&2 @@ -118,5 +133,15 @@ main() { fi } +# Функция для вывода списка пользователей +list_users() { + awk -F: '{print $1, $6}' /etc/passwd | sort +} + +# Функция для вывода списка процессов +list_processes() { + ps -eo pid,comm --sort=pid +} + # Вызов основной функции main