:: Home / Informationen / Linux / Shell
Home
Informationen
Linux
Mac OS X
Sun Solaris
Dienstleistungen
Jobs & Karriere
Download
Sitemap
Impressum

[ksh] Welche Version von KSH ist installiert?


echo ${.sh.version}
ksh93:
Version M 1993-12-28 q (der Buchstabe hinten kann variieren)

ksh88:
ksh: ${.sh.version}: bad substitution

[bash] ganze Zeile aus einer Datei einlesen


Die gerne verwendete for-Schleife macht Probleme wenn eine ganze Zeile in eine Variable eingelesen werden soll.

Problem:

Die Datei testfile hat folgenden Aufbau:
A1 B1
A2 B2
....

Der Standardansatz mit for-Schleife

for i in $(cat testfile) ; do echo $i ; done

f¨hrt zu folgendem unerw¨nschtem Ergebnis:

i=A1
i=B1
i=A2
i=B2

Verwenden wir stattdessen eine while-Schleife kommen wir zum gew¨nschten Ergebnis:

cat testfile | while read line; do echo $line ; done

line="A1 B1"
line="A2 B2"

[bash] Ganze Zeile aus Datei in mehrere Variablen einlesen


Um eine ganze Zeile aus einer Datei in mehrere Variablen einzulesen nutzen wir folgende Vorgehensweise.

Die Beispieldatei daten.txt hat drei durch ":" getrennte Felder.

Max Mustermann:Max.Mustermann@mustermail.de:maxmuster
Waltraud Wichtig:Waltraud.Wichtig@mustermail.de:wwichtig

Wir wollen die Daten einer Zeile in die Variablen n, e und l einlesen.

Das erste Feld enthält zwei durch ein Leerzeichen getrennt Strings, deshalb verwenden wir hier zwei Hilfsvariablen n1 und n2.

$> cat daten.txt | while read line ; do read n1 n2 e l <<< $(echo $line | tr : " ") ; n=$n1" "$n2 ;echo $n ; echo $e ; echo $l ; done

Max Mustermann
Max.Mustermann@mustermail.de
maxmuster
Waltraud Wichtig
Waltraud.Wichtig@mustermail.de
wwichtig

 

[bash] for-Schleife als Zaehlschleife


Die for-Schleife in der Bash kann mit Tricks auch als Z?hlschleife verwendet werden.

Dazu werden im Allgemeinen externe Programme verwendet die eine Liste erzeugen.
Der Syntax sieht dann wie folgt aus:

for Variable in $(Kommando) ; do
   Befehle
done

Beispiel:

for i in $(seq 1 10) ; do
    echo $i
done

Dies setzt voraus, dass das Kommando seq vorhanden ist, alternativ kann je nach Betriebssystem auch gseq oder jot verwendet werden.

Ein anderer Ansatz ist die Verwendung der integrierten Rechenfunktionen. Dies hat den Vorteil das keine externen Kommandos ben?tigt werden.
Der Syntax sieht dann wie folgt aus:

for ((Variable=Anfangswert ; Bedingung ; Z?hler )) ; do
   Befehle
done

Beispiel:

for (( i=1 ; $i <= 10 ; i++ )); do
    echo $i
done

Der Z?ler kann dabei so ausgedr?ckt werden:

Variable++          Erh?hung des Anfangswertes um 1 bei jedem Schleifendurchlauf
Variable--            Verringerung des Anfangswertes um 1 bei jedem Schleifendurchlauf
(( Variable=$Variable+N ))     Erh?hung des Anfangswertes um N bei jedem Schleifendurchlauf
(( Variable=$Variable-N ))      Verringerung des Anfangswertes um N bei jedem Schleifendurchlauf

[bash] Abhaengige Variablenzuweisung


Beispiel: Es soll der grössere Wert zweier Variablen einer dritten zugewiesen werden. Wenn beide Werte gleich sind, dann soll dieser Wert zugewiesen werden.

Das lässt sich sehr leicht mit einer if-Anweisung lösen. Es gibt aber auch andere Lösungen:

a=8
b=16

  • c=$a && (( $a < $b )) && c=$b
  • c=$(( $a > $b ? $a : $b ))
  • c=$(( $a < $b ? $b : $a ))

[bash] Pruefen ob Wert in Array enthalten ist


Um zu pruefen ob ein Wert in einem Array enthalten ist kann man mit einer for-Schleife das Array durchsuchen.

Eine Alternative ist folgender Konstrukt:

if [[ " ${meinarray[@]} " =~ " ${wert} " ]]; then 
  # Wert im Array enthalten
else
  # Wert nicht im Array enthalten
fi

[sed] Zeilen vor oder nach Suchpattern einfuegen


Zeilen nach dem Pattern einfügen:
sed -i '/pattern/a \
Zeile1\
Zeile2' datei

Zeilen vor dem Pattern einfügen:
sed -i '/pattern/i \
Zeile1\
Zeile2' datei

Verzeichnisstruktur rekursiv mit tar kopieren


Das rekursive kopieren eines Verzeichnisbaumes mit tar bewahrt die Dateirechte inklusive der Besitzer und die Zeitstempel und bietet sich insbesondere an wenn von einem Mountpoint auf einen anderen kopiert werden soll. Dazu muß kein Archiv auf der Festplatte angelegt werden. Folgende Konstruktion ermöglicht das rekursive kopieren aller Dateien im aktuellen Verzeichnis.

tar cf - . | (cd /zielverzeichnis ; tar xfp -)

Dabei erzeugt der tar-Befehl vor dem Pipe-Symbol (|) ein Archiv des aktuellen Verzeichnisses und schreibt es auf die Standardausgabe. Die Kommandos in den Klammern bewirken das die Shell in das Zielverzeichnis wechselt und der tar-Befehl die Daten von der Standardeingabe entpackt.

Login
Suchen
Links
Last update:07.03.2016 13:18