Shell skript

Gw3n

New Member
Könnte mir vielleicht jemand sagen was genau folgendes shell skript macht?
Ich brauch es für die Uni kann es leider nicht genau nachvollziehen :mad:
PHP:
#!/bin/bash

declare -i r=0 w=0 x=0
if test -f "$1"; then
   if read r w x <"$1"; then
   true
   else
     exit 254
fi
fi
test -r "$2" && r=r+1
test -w "$2" && w=w+1
test -x "$2" && x=x+1

echo $r $w $x >"$1"


DANKE
 
Last edited by a moderator:
Das Script erwartet in der Datei, die als erstes übergeben wird ein Zahlen-Tripel. Die jeweiligen Werte werden inkrementiert, falls das entsprechende Bit in den Berechtigungs-Bits der zweiten Datei gesetzt ist.

Code:
man bash
man test

Viele Grüße,
LinuxAdmin

PS: Das war doch hoffentlich keine Übungsaufgabe? Immerhin sind noch Semesterferien...
 
danke schonmal für die schnelle antwort! :)

vielleicht kannst du nochmal kurz erleutern was genau forlgende zeile macht:

if read r w x <"$1"; then


thx
 
Aus der man-page von bash:
Code:
       read  [-ers]  [-u  fd] [-t timeout] [-a aname] [-p prompt]
       [-n nchars] [-d delim] [name ...]
              [COLOR="Red"]One  line  is read from the standard input[/COLOR], or from
              the file descriptor fd supplied as an  argument  to
              the  -u  option,  [COLOR="Red"]and the first word is assigned to
              the first name, the second word to the second name,
              and  so on,[/COLOR] 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  val*
              ues.   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 following 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 ter*
                     minate the input line, rather than  newline.
              -e     If  the standard input is coming from a ter*
                     minal, 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 newline, 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  charac*
                     ter.  The backslash is considered to be part
                     of the line.  In  particular,  a  backslash-
                     newline  pair may not be used as a line con*
                     tinuation.
              -s     Silent mode.  If input is coming from a ter*
                     minal, characters 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 termi*
                     nal or a pipe.
              -u fdFP
                     Read input from file descriptor fd.

              If no names are supplied, the line read is assigned
              to the variable REPLY.  [COLOR="Red"]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.[/COLOR]
'<$1' leitet die Standardeingabe um, so dass aus $1 gelesen wird anstelle der Tastatur, was 'if' bedeutet, sollte wohl klar sein.
 
Back
Top