bash 스크립트에서 유닉스 / 리눅스 사용자를 추가하는 방법


9

여기 내 테스트 bash 스크립트가 있습니다. 나는 그것을 작동시킬 수 없다. 두 가지 오류가 나타납니다.

  1. Use of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
  2. Use of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.

내 스크립트는 다음과 같습니다.

#!/bin/bash
sudo adduser myuser << ENDX
password
password
First Last




Y
ENDX
exit 0

출력은 다음과 같습니다.

me@mycomputer$ ./adduser.sh 
Adding user `myuser' ...
Adding new group `myuser' (1001) ...
Adding new user `myuser' (1001) with group `myuser' ...
Creating home directory `/home/myuser' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully
Changing the user information for myuser
Enter the new value, or press ENTER for the default
        Full Name []:   Room Number []:         Work Phone []:  Home Phone []:  Other []: Use of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
Use of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
Is the information correct? [Y/n] me@mycomputer$

쿠분투 12.04 LTS에 있습니다

$ bash --version
bash --version
GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)

adduser (시스템 스크립트-나에 의해 수정되지 않은)의 두 줄과 관련된 두 줄 번호의 표기법은 다음과 같습니다.

for (;;) {
       my $chfn = &which('chfn');
    &systemcall($chfn, $new_name);
    # Translators: [y/N] has to be replaced by values defined in your
    # locale.  You can see by running "locale yesexpr" which regular
    # expression will be checked to find positive answer.
    print (gtx("Is the information correct? [Y/n] "));
    chop (my $answer=<STDIN>);        <-- LINE 589
    last if ($answer !~ m/$noexpr/o); <-- LINE 590
}

답변:


31

stdin 대신 명령 행 매개 변수를 사용하고 비밀번호에 chpasswd를 사용하십시오.

예를 들면 다음과 같습니다.

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd

2

adduser외부 프로그램 chfn을 호출하여 전체 이름 및 기타 사용자 정보를 읽습니다. chfn필요한 것뿐만 아니라 마지막 Y줄을 포함하여 많은 입력을 읽습니다 . 시 adduser이후에 확인을 요청의 Y라인을 읽은 (그러나 무시)에 의해 chfn때문에, adduser입력에 파일의 끝을 본다. 변수 $answer는 입력 행을 포함 할 것으로 예상되지만 읽을 입력이 없으므로 정의되지 않습니다.

스크립트를 작성 중이므로 명령 행에서 데이터 (암호 제외)를 전달하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.