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
  • Gruppe vieler Menschen

    Let's run #TUCgether!

    Zum Jubiläum des Chemnitzer Firmenlaufs gingen 266 Laufbegeisterte für die TU Chemnitz an den Start …

  • Menschen stehen vor einer Leinwand

    Erfolgreiche Summer School an der TU Chemnitz

    Professur Medienpsychologie und die Hochschulallianz Across begrüßten zur Summer School „How much science is in science fiction?“ medienbegeisterte Nachwuchswissenschaftlerinnen und -wissenschaftler aus neun verschiedenen Ländern …

  • Menschen stehen vor einem Haus

    Als Azubi an die Uni? Ja, klar!

    Kanzler der TU Chemnitz begrüßte neue Auszubildende und gratulierte Absolventinnen und Absolventen zum erfolgreichen Berufsabschluss – TU Chemnitz bildet aktuell in zehn Berufen aus …

  • Menschen stehen in einer Gruppe zusammen

    TU Chemnitz setzte erneut ein Zeichen der Wertschätzung

    Zehn Dienstjubilare erhielten am 2. September 2025 im Rahmen einer Feierstunde ihre Dankurkunden aus den Händen des Kanzlers der TU Chemnitz …