Bash/Scripting/Read

Aus SchnallIchNet
Wechseln zu: Navigation, Suche

read something from command-line, e.g. userinput or from stdin or from file this command is BASH_BUILTIN

read from stdin

...
echo -n "Enter you name: "; 
read USERNAME;
if [ ! -z "$USERNAME" ]; then
   echo "Hello $USERNAME";
else
   echo "Please enter a valid username!" 1>&2
   exit 1;
fi
read -p "Enter your password now: " -s PASSWORD
...

Here you can see 2 diffrent ways of displaying the prompt.

  1. use echo -n to display NO line-break at the ent of the echo-ed line
    and then using read to fill the vairable USERNAME
  2. use -p option of read to display the prompt and
    note the -s option (silent) because reading a password its a good idea NOT
    to echo (display) characters read from the commandline

read from file

to read a file line-by-line (using '\n' as seperator)
this example reads a file given as ARGV[1] to your script.
e.g. /path/to/yourscript /path/to/file

exec < $1

while read line; do
   # do whatever you want here, e.g.:
   echo $line
done

read man page

read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...]
              One  line  is  read  from  the  standard input, or from the file
              descriptor fd supplied as an argument to the -u option, and  the
              first word is assigned to the first name, the second word to the
              second name, and so on, with leftover words and their  interven-
              ing  separators  assigned  to the last name.  If there are fewer
              words read from the input stream than names, the remaining names
              are  assigned  empty  values.  The characters in IFS are used to
              split the line into words.  The backslash character (\)  may  be
              used  to  remove any special meaning for the next character read
              and for line continuation.  Options, if supplied, have the  fol-
              lowing meanings:
              -a aname
                     The words are assigned to sequential indices of the array
                     variable aname, starting at 0.  aname is unset before any
                     new  values  are  assigned.   Other  name  arguments  are
                     ignored.
              -d delim
                     The first character of delim is  used  to  terminate  the
                     input line, rather than newline.
              -e     If the standard input is coming from a terminal, readline
                     (see READLINE above) is used to obtain the line.
              -n nchars
                     read returns after reading nchars characters rather  than
                     waiting for a complete line of input.
              -p prompt
                     Display prompt on standard error, without a trailing new-
                     line, before attempting to read any input.  The prompt is
                     displayed only if input is coming from a terminal.
              -r     Backslash does not act as an escape character.  The back-
                     slash is considered to be part of the line.  In  particu-
                     lar,  a  backslash-newline pair may not be used as a line
                     continuation.
              -s     Silent mode.  If input is coming from a terminal, charac-
                     ters are not echoed.
              -t timeout
                     Cause  read  to time out and return failure if a complete
                     line of input is not read within timeout  seconds.   This
                     option  has  no  effect if read is not reading input from
                     the terminal or a pipe.
              -u fd  Read input from file descriptor fd.

              If no names are supplied, the line read is assigned to the vari-
              able  REPLY.   The  return  code  is zero, unless end-of-file is
              encountered, read times out, or an invalid  file  descriptor  is
              supplied as the argument to -u.

Siehe auch

File descriptors