저는 기본적으로 "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입니다.