Hallo,
hab mal paar grundlegende Dinge zusammengefasst:
Alles was auf der Konsole geht ist in Scripten verwendbar.
Script erstellen:
Erste Zeile:
(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:
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.