Springe zum Hauptinhalt

Archiv
next up previous contents
Next: Ablaufsteuerung Up: Bourne-Shell als Kommando- und Previous: Argumentübergabe beim Aufruf eines

Shell-Variablen

  • Shell-Variablen speichern Zeichenketten. Namen von Shell-Variablen müssen mit einem Buchstaben beginnen, dem Buchstaben, Ziffern und Unterstreichungszeichen folgen können. Die Zuweisung eines Zeichenkettenwertes geschieht folgendermaßen


    $ varname=zeichenkette


    Beispiel:

    $ farbe=blau
    $ vorname=Hans
    
    Bemerkung:

    Variable werden durch ihre Verwendung (Nennung des Namens) definiert, sie besitzen standardmäßig den Wert der leeren Zeichenkette.

  • Wenn die zuzuweisende Zeichenkette Leerzeichen, Tabulatorzeichen oder Newlinezeichen enthält, so muß die Zeichenkette markiert werden, z.B.
    $ name="ANTON ADLER"
    $ name=ANTON\ ADLER
    $ name='ANTON ADLER'
    
    Bemerkung: Markierungsmechanismen der Shell werden noch genauer erläutert
  • Eine Variable kann mit dem Attribut ,,Nur lesen`` versehen werden, so daß ihr Wert nicht mehr verändert werden kann, z.B.
    $ einrichtung="Fachbereich Informatik"
    $ readonly einrichtung
    
  • Shell-Variable besitzen einen definierten Gültigkeitsbereich, sie sind standardmäßig lokal bezüglich des aktuellen Shell-Prozesses. Eine Erweiterung des Gültigkeitsbereiches auf untergeordnete Shell-Instanzen (Kindprozesse) ist über das export -Kommando möglich, z.B.
    $ export einrichtung
    
    Bemerkung: export ohne Argument liefert eine Liste der exportierten Variablen
  • Der Zugriff auf den aktuellen Wert einer Variablen geschieht dadurch, daß vor den Variablenname das Zeichen $ gesetzt wird, z.B.:
    $einrichtung
    $farbe
    
    somit liefert
    $ echo $einrichtung
    Fachbereich Informatik
    
    während echo für eine Variable, der noch kein Wert zugewiesen wurde, nichts liefert:
    $ echo $xyz
    $
    
    Der Wert einer exportierten Variablen kann in einer Sub-Shell nur lokal verändert werden.
    Beispiel:
    $ trainer=ANTON\ ADLER
    $ echo $trainer
    ANTON ADLER
    $ export trainer
    $ sh
    $ echo $trainer
    ANTON ADLER
    $ trainer=BERND\ BIBER
    $ echo $trainer
    BERND BIBER
    $ exit
    $ echo $trainer
    ANTON ADLER
    $
    
  • Mit dem Kommando unset kann eine Variablendefinition rückgängig gemacht werden, z.B.
    $ unset trainer
    
  • Wenn der Wert einer Variablen mit einer nicht dazugehörigen Zeichenfolge verkettet werden soll, so muß der Variablenname in geschweiften Klammern eingeschlossen werden, z.B.
    $ jahreszeit=Winter
    $ echo ${jahreszeit}ferien
    Winterferien
    $ file=prog
    $ echo ${file}.c
    prog.c
    
  • Spezielle Ersetzungsmechanismen für Shell-Variable
    ${name:-wort} ersetzt name durch seinen Wert,
      falls dieser ungleich Null ist, ansonsten
      wird wort eingesetzt
    ${name:=wort} ersetzt name durch seinen Wert,
      falls dieser ungleich Null ist, andernfalls
      wird wort eingesetzt und name zugewiesen.
    ${name:?wort} ersetzt name durch seinen Wert,
      falls dieser ungleich Null ist, andernfalls
      wird wort auf der Standardfehlerausgabe
      ausgegeben und das Script abgebrochen.
    ${name:+wort} Setzt den Wert wort ein, falls name
      ungleich Null ist, ansonsten wird nichts ersetzt.
  • Shell-Variablen werden oft verwendet, um den Dialog am Terminal zu erleichtern, d.h. den ,,Tippaufwand`` zu reduzieren, indem z.B. für Pfadnamen Synonyme eingeführt werden:
    $ dir=/afs/tu-chemnitz.de/home/urz/s/stb
    $ ls $dir
    $ ls $dir/*.c
    
    Falls z.B. /afs/tu-chemnitz.de/home/urz/s/stb/cmd ein Shell-Script enthält, so ist der Aufruf auch einfach möglich
    $ $dir/cmd ...
    
  • Folgende spezielle Shell-Variablen besitzen einen von der Shell vordefinierten Wert:
    # Anzahl der Argumente, die dem Shell-Script übergeben wurden (bzw. 
      Anzahl der mittels set gesetzten Shell-Variablen i (Werte $1, $2, ...)
    * Bezugnahme auf alle Argumentwerte $1, $2, etc.
      (z.B. beim Aufruf des Shell-Scripts)
    @ analog wie $*; die Angabe ,,$@`` bezieht sich auf alle Variablen
      ,,$1``, ,,$2`` etc.
      Name des aktuell ausgeführten Shell-Scripts
    - Optionen dieser Shell
    ? Exitstatus (Return value) des letzten Kommandos
    $ Prozessnummer der Shell
    ! Prozessnummer des letzten Kommandos mit &
    IFS Liste von Worttrennzeichen in Argument
    MAIL File, das bei Änderung ,,you have mail``- Meldung bewirkt
    PS1 Primäre Prompt-Zeichenkette; Voreinstellung '$\$$'
    PS2 Sekundäre Prompt-Zeichenkette; Voreinstellung '>'
  • Die folgenden speziellen Shell-Variablen sind nicht automatisch gesetzt; ihre Werte werden gewöhnlich beim Sitzungsbeginn festgelegt (die Wertzuweisungen sind dabei im File $HOME/.profile enthalten). Sie können jedoch wie ,,normale`` Variablen modifiziert werden.
    HOME Standardargument für das cd- Kommando (HOME-Verzeichnis, für jeden Nutzer im Passwordfile /etc/passwd festgelegt)
    PATH Suchpfade für Kommandos, d.h. Reihenfolge der Verzeichnisse, in denen nach den Programmen bzw. Shell-Scripts gesucht werden soll. Die einzelnen Verzeichnisse sind durch das Zeichen : voneinander getrennt (p1:p2:p3:...:pn)
  • Beispiele:
    $ echo $PATH
    /bin:/usr/bin/:           #  1. /bin
                              #  2. /usr/bin
                              #  3. aktuelles Verzeichnis
    
    $ PATH=:/bin:/usr/bin:$HOME/bin
                              #  Suchreihenfolge:
                              # 1. aktuelles Verzeichnis
                              # 2. /bin
                              # 3. /usr/bin
                              # 4. Verzeichnis bin im Homeverzeichnis
    
    $ PATH=/bin::/usr/bin
                              # Suchreihenfolge:
                              # 1. /bin
                              # 2. aktuelles Verzeichnis
                              # 3. /usr/bin
    
  • Bemerkung:
    • Privatversionen von ,,Systemprogrammen``
    • Suchreihenfolge $\Leftrightarrow$ Antwortzeitverhalten
    PS1 Festlegung der Promptzeichenkette der Shell, standardmäßig $

    Beispiel: PS1=``Sie wünschen:''

    PS2 Promptzeichenkette bei Folgeeingaben, standardmäßig >

    Beispiel: $echo 'Hallo >wie geht's?'

    IFS Separatorzeichen der Shell, standardmäßig Leerzeichen, Tabulator- und Newlinezeichen
    MAIL Name des Nachrichtenfiles des Nutzers; er wird benachrichtet, wenn Nachrichten in dem File eingetroffen sind
  • Kommandosubstitution


    `cmd` $\Rightarrow$ wird ersetzt durch die Standardausgabe von cmd

    • Beispiel:
      $ date       # Uhrzeit, Datum
      Don Mär 16 11:18:58 MET 2000
      
      $ echo Aktuelles Datum und Uhrzeit: `date` 
      Aktuelles Datum und Uhrzeit: Don Mär 16 11:19:59 MET 2000
      $
      $ pwd 
      /afs/tu-chemnitz.de/home/urz/s/stb
      $ dir=`pwd` 
      $ echo $dir 
      /afs/tu-chemnitz.de/home/urz/s/stb
      
  • Textsubstitution und Markierungsmöglichkeiten (quoting)
    • Die Shell führt Substitutionen in folgender Reihenfolge durch:
      1.
      Variablensubstitution


      alle mit $ beginnenden Worte werden ersetzt durch ihren Zeichenkettenwert

      2.
      Kommandosubstitution


      `cmd` $\Rightarrow$ wird ersetzt durch Standardausgabe von cmd

      3.
      Leerzeichen-, Tabulator-, Newline-Interpretation


      Das nach 1. und 2. entstehende Ergebnis wird nach Trennzeichen durchsucht und die entsprechende Separierung durchgeführt (Ausnahmen: Trennzeichen in markierten Worten)

      4.
      Filenamengenerierung


      Auswertung der Metazeichen *, ?, [-]

    • Markierungsmechanismen (quoting) dienen dazu, die Sonderbedeutung von Metazeichen aufzuheben
      1.
      $\backslash$z hebt die (eventuelle) Sonderbedeutung von z auf
      2.
      In Apostrophe eingeschlossene Texte ('...' ) werden keinerlei Textsubstitution unterworfen. Das Zeichen ' darf in diesem Text nicht enthalten sein.
      3.
      Bei in Anführungszeichen (``...'') eingeschlossenen Texten ist die Sonderbedeutung der Metazeichen außer $\backslash$, `, `` und $ aufgehoben, d.h. die Shell führt Kommando- und Variablensubstituion durch.
    • Beispiel:
      $ echo "heute ist `date`; HOME-Verzeichnis: $HOME"
      heute ist Don Mär 16 11:21:40 MET 2000; HOME-Verzeichnis: /afs/tu-chemnitz.de/home/urz/s/stb
      $ echo "1 \$ = 1.95 DM"
      1 $ = 1.95 DM
      $
      

next up previous contents
Next: Ablaufsteuerung Up: Bourne-Shell als Kommando- und Previous: Argumentübergabe beim Aufruf eines
  • Skulptur der Justizia vor einem Gebäude

    Schulterschluss für ein Studium der Rechtswissenschaften an der TU Chemnitz

    Neue Website der TU Chemnitz zeigt, dass sich Vertreterinnen und Vertreter aus der Justiz, der Anwaltschaft, der Wirtschaft und der Wissenschaft einig sind, wie man in Chemnitz durch neue Studienangebote in den Rechtswissenschaften dem zunehmenden Bedarf an Juristinnen und Juristen in Sachsen wirkungsvoll begegnen kann …

  • Drei Männer stehen nebeneinander. Ein Mann in der Mitte hält eine Urkunde in den Händen.

    Peter Bernshausen ist neuer Kanzler der TU Chemnitz

    Mit der Bestellung durch das Sächsische Staatsministerium für Wissenschaft, Kultur und Tourismus übernimmt Peter Bernshausen ab 1. November 2024 die Leitung der Zentralen Universitätsverwaltung …

  • Grafik mit Vernetzungssymbolen

    Tag des wissenschaftlichen Nachwuchses am 28. November 2024

    Der „Tag des wissenschaftlichen Nachwuchses“ der TU Chemnitz steht in diesem Jahr im Zeichen der vielfältigen Wege zur Promotion und zu unterschiedlichen Karriereoptionen nach der Promotion – Kostenfreie Teilnahme ist nach Online-Anmeldung möglich …

  • Blick auf ein buntes Bild an einem Gebäudeanbau.

    Neue Kunst im „Erfenschlag“

    Studierende und Beschäftigte der TU Chemnitz schufen durch Malen auf dem Wasser ein Kunstwerk, das nun einen Gebäudeanbau auf dem Gelände des südlichsten Uni-Standorts ziert …