Bash 스크립트를 사용하여 사용자 생성

Bash 스크립트를 사용하여 사용자 생성

대화형 스크립트

스크립트는 사용자에게 생성하려는 계정 수와 이름 접두사를 물어봐야 합니다. 그런 다음 사용자가 지정한 수의 계정을 생성해야 하지만 이미 생성된 사용자는 건너뛰어야 합니다.

즉, user03이 존재하는 경우 사용 가능한 다음 번호인 user04 또는 user05로 이동합니다. **********

다음은 내가 작성한 스크립트이지만 예상대로 작동하지 않습니다.

#!/bin/bash
Clear
Declare -I num
Start=1
Echo -n “Enter number of accounts to be created: “
Read num
Echo -n “Enter user prefix: (student or user)”
Read pre
Echo “”
For I in { $num }
Do
    Echo “Adding user”
    Useradd -m $pre$num
    ((num++))
done

답변1

“...”대문자로 표기하면 안 되는 단어(Unix의 명령 이름은 대소문자를 구분함)가 포함되어 있고 작은 따옴표( 대신 "...") 를 사용하는 스크립트를 워드 프로세싱 프로그램에 작성한 것 같습니다 . 스크립트를 작성하려면 더 간단한 텍스트 편집기(예: nano, 또는 )를 사용하는 것이 좋습니다 . 웹사이트emacsvimhttps://www.shellcheck.net/스크립트에서 간단한 오류를 찾는 데 매우 유용합니다.

팁으로 모든 명령 이름은 소문자여야 하며 따옴표를 변경해야 합니다.

루프도 조금 이상합니다. 한편으로는 루프를 원하는 것 같고 { $num }(무슨 뜻인지 모르겠습니다) 다른 한편으로는 num루프 내에서 증가합니다. 이는 num사용자가 입력한 숫자이므로 늘릴 필요가 없습니다. 루프에서 변수를 업데이트한다고 가정해 보겠습니다.

number=1
while [ "$num" -ne 0 ]; do
   # code here that increments "number",
   # and conditionally decrements "num"
done

사용자 이름에 사용된 번호를 계속 추적해야 한다는 점을 기억하세요.또한생성된 사용자 수. 올바른 수의 사용자가 언제 생성되었는지 확인하고 시스템에 이미 존재하는 사용자 이름을 건너뛸 수 있으려면 이 정보가 필요합니다. 여기서 나는 선택한다감소 num이라는 변수에 사용자 이름에 사용된 숫자를 유지하면서 0에 도달할 때까지 number.

루프 내부에서는 다음을 수행해야 합니다.노력하다사용자를 생성 $pre$number하고 성공하면 감소시킵니다 num. 각 반복마다 항상 증가합니다 number. 0에 도달할 때까지 반복합니다 num. 이는 모든 사용자를 생성했음을 의미합니다.

성공 및 실패가 정상적인 종료 상태를 반환한다고 가정하면 adduser(참고: 저는 Linux 사용자가 아니므로 기존 사용자를 생성하려고 하면 CentOS에서 어떤 일이 일어나는지 모르겠습니다) 다음을 사용하여 사용자를 추가할 수 있습니다.

if adduser -m "$pre$number"; then
    # adduser succeeded, we've created a new user, decrement num
    num=$(( num - 1 ))
fi
number=$(( number + 1 ))

아니면 할 수 있습니다제안된 사용자 이름이 존재하는지 확인하세요.처음 사용 getent:

if ! getent passwd "$pre$number" >/dev/null; then
    # the user don't exist, create it
    adduser -m "$pre$number"
    num=$(( num - 1 ))
fi
number=$(( number + 1 ))

getent passwd주어진 사용자 이름이 시스템에 없으면 명령이 실패합니다. 여기서는 adduser기존 사용자 이름으로 호출하는 것을 피하기 위해 이 사실을 활용합니다 .

스크립트 시작 부분에 있는 대부분의 코드는 무시하겠지만 num정수로 선언할 필요는 없으며 read -p 'prompt' var특정 프롬프트를 통해 사용자로부터 값을 읽어온다는 점만 지적하겠습니다. 따라서 echo이러한 진술은 필요하지 않습니다.

문자열 이 $pre아니더라도 (현재 코드의 출력에서 ​​제안하는 대로) 코드의 문자열이 실제로 허용된다는 사실을 고려할 수도 있습니다 .studentuser

$pre예를 들어 공백이 포함된 경우와 같이 사용자 이름이 유효하지 않을 수 있는 상황 도 고려해야 합니다 . 코드 작성 방법에 따라 사용자 이름으로 확인하지 않으면 $pre$number계정을 만들 수 없거나 무제한으로 계정을 만들려고 할 수 있습니다.

관련 정보