fix -- issue

This commit is contained in:
gandc 2024-12-10 20:21:41 +03:00
parent 3a3b52fc69
commit 802556e778
Signed by: gandc
GPG Key ID: 9F77B03D43C42CB4

79
script
View File

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