Fix problems
This commit is contained in:
parent
caf1bb8d32
commit
e4454f77c2
130
script
130
script
@ -1,14 +1,14 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
list_users() {
|
# Обработка аргументов через getopts
|
||||||
awk -F: '{print $1, $6}' /etc/passwd | sort
|
LOG_FILE=""
|
||||||
}
|
ERR_FILE=""
|
||||||
|
SHOW_USERS=0
|
||||||
|
SHOW_PROCESSES=0
|
||||||
|
SHOW_HELP=0
|
||||||
|
|
||||||
list_processes() {
|
# Функция отображения справки
|
||||||
ps -eo pid,comm --sort=pid
|
display_help() {
|
||||||
}
|
|
||||||
|
|
||||||
show_help() {
|
|
||||||
echo "Usage: $0 [options]."
|
echo "Usage: $0 [options]."
|
||||||
echo "Options:"
|
echo "Options:"
|
||||||
echo " -u, --users Display a list of users and their home directories"
|
echo " -u, --users Display a list of users and their home directories"
|
||||||
@ -16,64 +16,96 @@ show_help() {
|
|||||||
echo " -l, --log PATH Redirect output to a specified file"
|
echo " -l, --log PATH Redirect output to a specified file"
|
||||||
echo " -e, --errors PATH Redirect error output to a specified file"
|
echo " -e, --errors PATH Redirect error output to a specified file"
|
||||||
echo " -h, --help Show this message and terminate"
|
echo " -h, --help Show this message and terminate"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Проверка доступности пути
|
||||||
check_path() {
|
check_path() {
|
||||||
local path=$1
|
local path="$1"
|
||||||
if [ ! -w "$path" ]; then
|
touch "$path" 2>/dev/null
|
||||||
echo "Error: No access to write to $path" >&2
|
if [ $? -ne 0 ]; then
|
||||||
exit 1
|
echo "Error: Cannot write to $path" >&2
|
||||||
|
return 1
|
||||||
fi
|
fi
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
log_output() {
|
# Функция для вывода списка пользователей
|
||||||
local path=$1
|
list_users() {
|
||||||
check_path "$path"
|
awk -F: '{print $1, $6}' /etc/passwd | sort
|
||||||
exec >"$path"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log_errors() {
|
# Функция для вывода списка процессов
|
||||||
local path=$1
|
list_processes() {
|
||||||
check_path "$path"
|
ps -eo pid,comm --sort=pid
|
||||||
exec 2>"$path"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ARGS=$(getopt -o upl:e:h --long users,processes,log:,errors:,help -n "$0" -- "$@")
|
# Парсинг аргументов через getopts
|
||||||
if [ $? -ne 0 ]; then
|
while getopts ":hupl:e:" opt; do
|
||||||
echo "Error: Incorrect input" >&2
|
case "$opt" in
|
||||||
exit 1
|
h)
|
||||||
fi
|
SHOW_HELP=1
|
||||||
eval set -- "$ARGS"
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
case "$1" in
|
|
||||||
-u|--users)
|
|
||||||
list_users
|
|
||||||
shift
|
|
||||||
;;
|
;;
|
||||||
-p|--processes)
|
u)
|
||||||
list_processes
|
SHOW_USERS=1
|
||||||
shift
|
|
||||||
;;
|
;;
|
||||||
-l|--log)
|
p)
|
||||||
log_output "$2"
|
SHOW_PROCESSES=1
|
||||||
shift 2
|
|
||||||
;;
|
;;
|
||||||
-e|--errors)
|
l)
|
||||||
log_errors "$2"
|
LOG_FILE="$OPTARG"
|
||||||
shift 2
|
|
||||||
;;
|
;;
|
||||||
-h|--help)
|
e)
|
||||||
show_help
|
ERR_FILE="$OPTARG"
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
--)
|
|
||||||
shift
|
|
||||||
break
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Unknown parameter $1" >&2
|
echo "Invalid option: -$OPTARG" >&2
|
||||||
|
display_help
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Основная логика
|
||||||
|
main() {
|
||||||
|
if [[ $SHOW_HELP -eq 1 ]]; then
|
||||||
|
display_help
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Настройка вывода в лог-файлы
|
||||||
|
if [[ -n "$LOG_FILE" ]]; then
|
||||||
|
if ! check_path "$LOG_FILE"; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
exec 1>"$LOG_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$ERR_FILE" ]]; then
|
||||||
|
if ! check_path "$ERR_FILE"; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
exec 2>"$ERR_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Выполнение запрошенных действий
|
||||||
|
if [[ $SHOW_USERS -eq 1 && $SHOW_PROCESSES -eq 1 ]]; then
|
||||||
|
echo "Error: Cannot use both -u and -p options simultaneously." >&2
|
||||||
|
display_help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $SHOW_USERS -eq 1 ]]; then
|
||||||
|
echo "USER HOME"
|
||||||
|
list_users
|
||||||
|
elif [[ $SHOW_PROCESSES -eq 1 ]]; then
|
||||||
|
list_processes
|
||||||
|
else
|
||||||
|
echo "Error: No action specified." >&2
|
||||||
|
display_help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Вызов основной функции
|
||||||
|
main
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user