"useradd"를 통해 대화식으로 사용자를 추가해 보았습니다.

"useradd"를 통해 대화식으로 사용자를 추가해 보았습니다.

저는 기본적으로 "useradd"를 대화식으로 사용하고 옵션을 선택할 수 있는 간단한 스크립트를 작성하려고 합니다.

특정 목적의 옵션을 대화형으로 정의하거나 다음 사용 가능한 설정 또는 기본 설정으로 설정하려고 합니다.

내가 가진 주요 문제는 그룹 ID 및 그룹 등에 대해 다음으로 사용 가능한 값을 얻는 방법입니다.

홈 디렉토리와 셸에 대한 사전 설정을 설정할 수 있다고 가정하지만 이러한 변수에 대한 상수를 설정하는 것 외에 덜 무차별적인 방법이 있는지 알아보고 싶습니다.

지금까지 나는 이것을 했습니다:

#!/bin/bash
# Script to add a user to Linux system

if [ $(id -u) -eq 0 ]; then
    read -p "Enter username : " username
    read -p "Enter password : " password
    read -p "Enter group id or [default to next available]: " gid
    read -p "Enter additional groups or [default to next available]: " group
    read -p "Enter home directory or [default to next available]: " hdir
    read -p "Enter desired shell or [default to next available]: " difshell

    egrep "^$username" /etc/passwd >/dev/null
    if [ $? -eq 0 ]; then
        echo "$username exists!"
        exit 1
    else
        pass=$(perl -e 'print crypt($ARGV[0], "password")' $password)
        useradd -p$pass -g$gid -G$group -d$hdir -s$difshell $username
        [ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!"
    fi
else
    echo "Only root may add a user to the system"
    exit 2
fi

답변1

$HOME 및 $SHELL 변수에 대해 "다음 사용 가능"이 무엇을 의미하는지 모르겠습니다. 방금 기본값으로 설정한 것: /home/USERNAME또는 /bin/bash무엇이든. 의 경우 $HOME디렉터리가 존재하지 않는지 확인하세요( [ -e "/home/$username" ] && echo "Directory exists").

그룹의 경우 사용 가능한 그룹을 나열하고 다음 그룹을 선택하면 됩니다. 이것데비안 그룹 정책(데비안에만 국한된 것은 아니라고 생각합니다.) 일반 사용자의 GID는 1000에서 5999 사이로 지정되어 있습니다. 따라서 해야 할 일은 구문 분석을 수행하고 /etc/passwd범위에 있는 기존 그룹을 인쇄한 다음 하나를 추가하는 것뿐입니다.

grp=$(awk -F: '$4>=1000 && $4<6000{print $4+1}' /etc/passwd | sort -n | tail -n1)

네 번째 구분 기호 필드의 값이 1000에서 6000 사이인 경우 이 awk명령은 해당 필드의 값에 :1을 더한 값을 인쇄합니다. 그런 다음 정렬하고 위도선을 유지합니다. 결과는 현재 가장 큰 GID보다 1 큰 GID입니다.

관련 정보