Shell Skripten Tutorial

js-mueller

Erfahrenes Mitglied
Hi weiss jemand wo es gut verständliche tutorials zum shell skripten gibt?
Ich wollt damit mal nen bissle anfangen.
Ich hoff jemand kennt nen paar.

:)
 
Hallo,
hab mal paar grundlegende Dinge zusammengefasst:

Alles was auf der Konsole geht ist in Scripten verwendbar.
Script erstellen:
Erste Zeile:
Code:
#!/bin/ksh
(oder irgendeine andere Shell mit der das Script ausgeführt werden soll)
Als reine Textdatei speichern, z.B. mit vi, vim, emacs, ...
und das x-Recht setzen, damit es ausführbar ist.

Das Script kannst du dann wie ein Programm starten, es wird dann in einer neuen Shell ausgeführt.
Soll es in der aktuellen ausgeführt werden kannst du es mit . scriptnamen starten.

Variablen:
Code:
# Kommentarzeile, wird nicht ausgeführt

$0           der Name des Script
$1 bis $9    Übergabeparameter an das Script
$#           Anzahl übergebener Parameter
$*           Liste aller übergebenen Parameter
$$           Prozessnummer des Script
$?           Exit-Code des letzten Prozess

# Länge einer Variablen
${#variable}

# Arrays:
# Eine Variable mit mehreren Feldern
var[0]="text"
var[1]="text"
...
# Werte aus einem Array anzeigen:
print ${var[1]}
# Alle Werte aus dem Array:
print ${var[*]}
# Anzahl gefüllter Werte im Array:
print ${#var[#]}

# Array automatisch erstellen lassen:
set -A Wochentage "Montag Dienstag Mittwoch ..."
# Wochentage[0] enthält jetzt Montag,
# Wochentage[1] enthält Dienstag, usw.

Funktionen:
Eine Funktion ist wie ein kleines Unterscript und bleibt
erhalten bis die Shell in der sie definiert wurde beendet wird.
Einer Funktion können Parameter übergeben werden die wieder über $1, $1, ... abgefragt werden können.
Code:
# Funktion erstellen:
meineFunktion()
{
  echo $1
}

# Aufruf der Funktion
meineFunktion "parameter"

Verzweigung:
Code:
if [[ -f $1 ]]
then "$1 existiert"
else "$1 existiert nicht"
fi

Schleifen:
als Ausdruck nach "in" kann eine Liste stehen. z.B. "eins zwei drei" oder das Ergebnis eines Kommandos oder Ausdrucks, z.B. `ls`
Im Schleifenkopf (beim for) muss die Variable ohne $-Zeichen stehen,
im Schleifenrumpf (do bis done) kann mit $ auf deren Inhalt zugegriffen werden.
Code:
echo "Dateien in ~/texte:"
for variable in `ls ~/texte`
 do
    echo $variable
done

# Alle Übergabeparameter anzeigen:
for param in $*
 do
    echo $param
done

# Wiederholen bis Bedingung wahr ist:
while [[ bedingung(en) ]]
 do
    # Anweisungen
done

"Ausführende" Hochkomma: `Ausdruck der ausgeführt werden soll`
Hochkomma für Texte: "Text"
Schützende Hochkomma: 'das $ Zeichen wird hier nicht durch eine Variable ersetzt'

Vergleiche:
Code:
[[ -n string ]]     wahr, wenn Stringlänge > 0
[[ -z string ]]     wahr, wenn String leer ist
[[ str1 != str2 ]]  wahr, wenn beide ungleich sind
[[ -f datei ]]      wahr, wenn datei eine normale Datei ist
[[ -d datei ]]      ...Verzeichnis
[[ -L datei ]]      ...symbolischer Link
[[ -s datei ]]      wahr, wenn datei größer 0
[[ -r datei ]]      wahr, wenn vom Prozess lesbar
[[ -w datei ]]      ... wenn beschreibbar
[[ -x datei ]]      ... ausführbar
[[ 1 -eq 2 ]]       wahr, wenn Ganzzahlen gleich sind
[[ 1 -ne 2 ]]       ... ungleich
... -gt  >
    -ge  >=
    -lt  <
    -le  <=
Negation einer Bedingung mit !
logisches UND:  bedingung1 -a bedingung2
logisches ODER: bedingung1 -o bedingung2

Verzweigung bei Vergleichen:
Code:
# entweder:
if [[ -n "Text" ]]
then # mach was
else # mach was anderes
fi
# oder
[[ -n "Text" ]] && anweisung || andere_anweisung

Der Variablen text das Ergebnis von ls zuweisen:
Code:
text=`ls`

Nützliche Hilfsprogramm für Scripte:
tr, grep, wc, cut, ...
formatierte Ausgabe mit printf
siehe man-pages

Script beenden mit exit, optional kann auch ein Exit-Code angegeben werden, exit 0 für fehlerfrei, exit 1 bzw. eine Ganzzahl für Fehlernummer.
 
ein sehr gutes Buch(!)/Tutorial findest du hier
Mit diesem feinem Dokument habe ich auch angefangen in die Bash zu tauchen



Ciao

Habenix
 
Zurück