Linux script to prompt for password

by on February 14, 2006 · 10 comments· LAST UPDATED September 1, 2006

in

Linux do not provide any special or specific command to read password. However, bash shell comes with builtin command called read. It read date from the standard input (keyboard), or from file descriptor FD if the -u option is supplied. General syntax is as follows:
read -s -p "Password: " VARIABLE

Where,

  • -s: Do not display password on screen. It causes input coming from a terminal/keyboard to not be echoed
  • -p: "Password: ": Display text message
  • VARIABLE: Bash variable in which your password stored

For example, try out following example at shell prompt:
$ read -s -p "Enter Password: " mypasswordOutput:

Enter Password:  

Now display password:
$ echo $mypassword See complete script to accept password using read command.

TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 10 comments… read them below or add one }

1 Dave August 17, 2006 at 2:19 am

Thanks!

Reply

2 Tukur Dan-Asabe September 12, 2006 at 8:28 am

Please I want to y1, y2 and y3 to have values piped in by the pipe (|) and read to read from the file and asign them to the variables but

export tukur=2
test is a file contain 3 columns say: aa bb cc
after excuting the following command y1, y2, y3 dont contain anythin pls could someone help?

tail -n +$tukur home/tukur/test | read -r y1 y2 y3

Thank you,
Tukur Dan-Asabe.

Reply

3 nixCraft September 12, 2006 at 2:13 pm

Tukur,

Assuming that your file.txt is as follows:
val1 val2 val3

Here is a shell script:

#!/bin/sh
while read line
do
# store field 1
F1=$(echo $line|cut -d” ” -f1)
# store field 2
F2=$(echo $line|cut -d” ” -f2)
# store field
F3=$(echo $line|cut -d” ” -f3)
echo $F1 ” ” $F2 ” ” $F3
done < file.txt

Var $F1 $F2 and $F3 stores the value. If you need more help try out shell scripting forum @ http://forum.cyberciti.biz/

Reply

4 Tukur Dan-Asabe October 19, 2006 at 8:58 am

Thanks nixcraft,

Reply

5 beta March 15, 2011 at 4:48 am

Unfortunately, read -s only works if the first line of your script sets the shell to bash. Tested in ubuntu.

IF THIS does work
#!/bin/sh

set to
#!/bin/bash

Reply

6 Josu May 27, 2011 at 11:11 am

Thank for this post, very interesting.

Reply

7 rem November 1, 2011 at 3:55 pm

Hi Vivek,

How to make a one liner that can implement the prompt script to run multiple times?
eg. the simplest one i can think of:

i have one user list, name it as userlist.txt with content as below:
mary:mary@mail.com
kent:kent@mail.com
judy:judy@mail.com
……

with a script that used to reset single user password, resetpwd.sh
#!/bin/bash

user=$1

read -p “reset user password (y/n)” yn

case $yn in
y|Y)
echo “plsresetlater” | passwd –stdin $user &> /dev/null;;
n|N)
echo “user password did not change”;;
esac

then run the one liner by piping all the username to the resetpwd.sh; see output:

reset user password (y/n) y #user mary
reset user password (y/n) n #user kent
user password did not change
reset user password (y/n) n #user judy
user password did not change
……

i have tried the awk; not working
awk -F “:” ‘{print $1}’ userlist.txt | while read users; do resetpwd.sh $users; done

Reply

8 Mmm January 20, 2012 at 4:37 am

hi guys,
if in the middle of execution of script ,
some process asked for some input from keyboard . How can i provide that input from the script?

Reply

9 balarajangeetha October 14, 2013 at 1:57 am

you may try the following (i am using them in SOLARIS)
#
echo “enter some_input”
read some_input
#
# to display entered input and then to abort or proceed
echo “entered some_input is $some_input. Press ENTER key to continue or CONTROL-C to abort”
read
#

Reply

10 Jacco Hoeve February 23, 2013 at 5:39 pm

I took your script and made it fully automated:

if [[ $(whoami) == 'root' ]]; then
  USER=johndoe
  read -s -p 'Enter Password:' PASSWORD
  HOSTNAME=10.0.1.16
  AFPSHARE="TM_MBP13"
  TM_NAME=$(hostname -s)
  # Don't change these ...
  MOUNT=/Volumes/TimeMachine
  SPARSEBUNDLE=$MOUNT/${TM_NAME}.sparsebundle
  PLIST=${SPARSEBUNDLE}/com.apple.TimeMachine.MachineID.plist
  echo "Disabling TimeMachine"
  tmutil disable
  echo "Unmounting ${AFPSHARE}"
  while mount | grep ${AFPSHARE} > /dev/null; do  mount | grep ${AFPSHARE} | awk '{print $3}' | xargs -n1 -I{} umount -f {}; done
  echo "Mounting volume"
  mkdir $MOUNT
  mount_afp afp://${USER}:${PASSWORD}@${HOSTNAME}/${AFPSHARE} ${MOUNT}
  echo "Changing file and folder flags"
  chflags -R nouchg "${SPARSEBUNDLE}"
  echo "Attaching sparse bundle"
  DISK=$(hdiutil attach -nomount -readwrite -noverify -noautofsck "${SPARSEBUNDLE}" | grep 'Apple_HFS' | awk '{ print $1 }')
  echo "Repairing volume"
  diskutil repairVolume ${DISK}
  /sbin/fsck_hfs -fry ${DISK}
  echo "Fixing Properties"
  cp "${PLIST}" "${PLIST}.backup"
  sed -e '/RecoveryBackupDeclinedDate/{N;d;}'   \
      -e '/VerificationState/{n;s/2/0/;}'       \
      "${PLIST}.backup" \
       > "${PLIST}"
  echo "Unmounting volumes"
  hdiutil detach ${DISK}
  umount ${MOUNT}
  echo "Enabling TimeMachine"
  tmutil enable
  echo "Starting backup"
  tmutil startbackup
else
  echo Please run this script as root.
fi

Reply

Leave a Comment

Tagged as:

Previous Faq:

Next Faq: