How to add users to Linux through a shell script

32,721

Output from "man 1 passwd":

--stdin
      This option is used to indicate that passwd should read the new
      password from standard input, which can be a pipe.

So to answer your question, use the following script:

echo -n "Enter the username: "
read username

echo -n "Enter the password: "
read -s password

adduser "$username"
echo "$password" | passwd "$username" --stdin

I used read -s for the password, so it won't be displayed while typing.

Edit: For Debian/Ubuntu users -stdin won't work. Instead of passwd use chpasswd:

  echo $username:$password | chpasswd
Share:
32,721

Related videos on Youtube

Rastko Stamenkovic
Author by

Rastko Stamenkovic

Updated on September 18, 2022

Comments

  • Rastko Stamenkovic
    Rastko Stamenkovic over 1 year

    The shell script that I have to write has to create new users and automatically assign them to groups. This is my code so far:

    echo -n "Enter the username: "
    read text
    useradd $text
    

    I was able to get the shell script to add the new user (I checked the /etc/passwd entry). However, I have tried and I am not able to get a passwd (entered by the user) to the newly created user before. If anyone could help me assign a password to the newly created user it would be of much help.

  • Lambert
    Lambert over 8 years
    On my host (Linux Mint) the --stdin does not work: passwd: unrecognized option '--stdin'
  • Lambert
    Lambert over 8 years
    Alternative is to use read -rs newpassword; useradd -p $(md5pass "$newpassword") $username
  • Rastko Stamenkovic
    Rastko Stamenkovic over 8 years
    The '--stdin' also does not work on my host. I tried the 'chpasswd' but that also does not seem to work. Any other advice
  • Tem
    Tem over 8 years
    which OS do you use?
  • Rastko Stamenkovic
    Rastko Stamenkovic over 8 years
    I use QEMU Linux.
  • Rastko Stamenkovic
    Rastko Stamenkovic over 8 years
    With the updated version it works. Instead of creating a new group with the name of the username, is there a way to assign the user to a specific already created group?
  • Rastko Stamenkovic
    Rastko Stamenkovic over 8 years
    I have resolved the issue by adding usermod -a -G "groupname" "username". This assigns the user to a secondary group.
  • countermode
    countermode over 7 years
    A bit of explanation (esp. for lines -1 and -2) would be quite nice.