비밀번호로 사용자를 생성하고 사용자가 존재하는지 확인한 후 그룹에 추가하십시오.

비밀번호로 사용자를 생성하고 사용자가 존재하는지 확인한 후 그룹에 추가하십시오.

Bash 스크립트를 작성해야 해요

  1. root사용자로 실행 중인지 확인
  2. 사용자 이름을 물어보세요
  3. 사용자가 존재하는지 확인
  4. 새 사용자 및 비밀번호 추가
  5. 그룹 이름을 묻는다
  6. 그룹이 존재하는지 확인하세요.
  7. 그룹에 사용자 추가

나는 이런 코드를 썼다.

function create_user() {
if (( $EUID == 0)); then
echo "Only for root users."
exit
fi
echo "User name: "
read userschool
for x in $(awk -F":" '{ print }' /etc/passwd ); do
if [ $x == userschool ] ; then
echo "This user exists"
sleep $delay_time && exit
fi 
done
sudo useradd -p $(openssl passwd -1 $PASS) $userschool
echo "User has been added"
sleep $delay_time
echo "Name of group"
read school
for x in $(awk -F":" '{ print }' /etc/group ); do
if [ $x == school ] ; then
echo "Group doesn't exists"
else
echo "$userschool has been added to group $school"
sleep $delay_time
break 2
fi
done
}

거의 작동하지만 사용자가 존재하면 스크립트도 그를 다시 추가하는데 이유는 모르겠습니다. 사용자가 존재하고 정지한다는 메시지를 전달하고 싶다.

답변1

$x변수가 아닌 리터럴과 비교하고 있습니다 userschool. 변수 호출을 큰따옴표로 묶어야 합니다.와일드카드 및 단어 분할 방지. 그것은해야한다:

if [ "$x" == "$userschool" ]; then
...
fi

if [ "$x" == "$school" ]; then
...
fi

그리고 전체 /etc/passwd를 반복하고 한 줄씩 비교할 필요가 없습니다. 대신 다음을 수행하세요.

awk -F: -v user=$userschool '$1 == user {print $1}' /etc/passwd

-vawk에서 변수 할당은 어디에 있습니까?

이미 존재하는 경우 지정된 사용자 이름을 출력합니다.

# Since it's bash, you can do this instead
read -p "Username: " userschool
exists=$(awk -F: -v user=$userschool '$1 == user {print $1}' /etc/passwd)

if [[ "$exists" ]]; then
  echo "User exists."
  sleep $delay_time
  exit 1
fi 

# create user
...

답변2

주요 문제는

awk -F":" '{ print }' /etc/passwd

전체 줄을 인쇄합니다. 확실히 그렇습니다

awk -F":" '{ print $1; }' /etc/passwd

그리고 당신은 잊어버렸 $습니다 $x == userschool. "$x" = "$userschool"물론 그래야 합니다.

exit게다가 전화하는 것도 의미가 없어

sleep $delay_time && exit

exit모든 상황에서 시행되기를 원하기 때문입니다 . 하지만 문제가 있는 경우에는 그렇지 않습니다 sleep(예: 설정하는 것을 잊었거나 잘못된 값을 부여한 경우 ). delay_time그래서 그래야 한다

E_USER_EXISTS=3
if [ "$x" = "$userschool" ] ; then
    echo "This user exists"
    sleep "$delay_time"
    exit "$E_USER_EXISTS"
fi

그럼에도 불구하고 이것은 나쁜 접근 방식입니다. 나중에 더 나은 것을 추천하겠습니다.

답변3

기본적으로 useradd 명령은 사용자가 이미 존재하는 경우 오류를 발생시킵니다. 다시 확인할 필요가 없습니다.

function create_user() {
if [[ $EUID -ne 0 ]]; then
 echo "This script must be run as root" 
 exit 1
fi
echo -n "User name: "
read userschool
sudo useradd -p $(openssl passwd -1 $PASS) $userschool && echo "User has been added"
sleep $delay_time
echo "Name of group"
read school
sudo groupadd $school &>>/dev/null && echo "Group created $school"
sudo usermod -aG $school $userschool
}

관련 정보