LPIC102/105.2 Einfache Skripte anpassen oder schreiben: Unterschied zwischen den Versionen
| Keine Bearbeitungszusammenfassung | Keine Bearbeitungszusammenfassung | ||
| Zeile 120: | Zeile 120: | ||
|   exit 0 |   exit 0 | ||
| *Eine ''while-do-done'' Schleife | |||
| *Nach ''do'' folgen Anweisungen, die sich wiederholen. Mit ''done'' wird die Sequenz beendet und es beginnt von vorne. | |||
| *''shift'' verschiebt die Übergabewerte. D.h. aus $2 wird $1, aus $3 wird $2 und so weiter. | |||
| *<code>while test $# -gt 0</code> ist eine Abbruchbedingung und bedeutet in etwa:"Solange die Anzahl der verbleibenden Übergabewerte größer als null ist, dann ..." | |||
| Die Ausführung und Ausgabe sieht so aus: | |||
|  $ betteraddi 7 3 6 4 2 7 9 | |||
|  Die Summe ihrer Eingaben ist 38 | |||
| *Man kann ''test'' auch durch eckige Klammern ersetzen: <code>while [ $# -gt 0 ] | |||
| *Der Befehl ''test'' hat viele Optionen und Parameter, hier ein kleiner Ausschnitt | |||
| {|class="wikitable" | |||
| !Option !! Beschreibung | |||
| |- | |||
| |''-r'' <Datei> || Datei existiert und ist lesbar | |||
| |- | |||
| |''-w'' <Datei> || Datei existiert und ist beschreibbar | |||
| |- | |||
| |''-d'' <Datei> || Datei existiert und ist ein Verzeichnis | |||
| |- | |||
| |''-u'' <Datei> || Datei exisitert und das SUID-Bit ist gesetzt | |||
| |- | |||
| |''-f'' <Datei> || Datei existiert und ist eine normale Datei | |||
| |- | |||
| |Man kann mit ''test'' ach zwei Werte und Dateien vergleichen | |||
| |- | |||
| |''<Datei1> -nt <Datei2>'' || Datei 1 ist neuer als Datei 2 | |||
| |- | |||
| |''<Wert1> -eq <Wert2>'' || Wert 1 ist gleich Wert 2 | |||
| |} | |||
| [[Category:Linux]] | [[Category:Linux]] | ||
Version vom 23. Juli 2019, 13:31 Uhr
Mithilfe von Skripten können alltägliche Aufgaben völlig automatisch ablaufen lassen. In Skripten müssen neben Shell-Kommandos auch Befehle fürs Programmieren angewendet werden, vornehmlich Schleifen und Fallunterscheidungen.
Kommandos verketten
Es gibt drei Zeichen, um Kommandos nacheinander auszuführen.
| Zeichen | Bedeutung | Beispiel | 
|---|---|---|
| ; | Kommandos werden nacheinander durchgeführt | echo "Dies ist eine Liste";ls -l | 
| && | Kommando 2 wird dann ausgeführt, wenn das erste Kommando erfolgreich war. | ls && echo "Vorgang erfolgreich" | 
| || | Kommando 2 wird dann ausgeführt, wenn das erste Kommando erfolglos war. | ls /etz || echo "Fehlernummer $?" | 
Lange Kommandos, die sich über mehrere Zeilen verteilen, sollten mit einem Backslash \ aufgeteilt werden.
dd of=/dev/zero \ if=/.tmp \ bs=1M count=2000 stauts=progress
Ausführung eines Skripts
Ausführungsberechtigung
- Ein Shell-Skript kann nur dann ausgeführt werden, wenn die Datei auf "ausführbar" gesetzt wird.
- Mit ls -l kann man die Berechtigungen sehen
- Mit chmod kann man das Attribut für die Ausführbarkeit gesetzt werden.
# chmod a+x <Skriptdatei> // Alle können das Skript ausführen # chmod 700 <Skriptdatei> // Nur der Benutzer kann das Skript ausführen # chmod 4700 <Skriptdatei> // Normale Benutzer können es verwenden, wie der Besitzer des Skripts
Skript ausführen
Ein Beispielskript addi:
#Addiert zwei Variablen let summe=$1+$2 echo "Die Summe aus $1 und $2 ist $summe."
An die Bash, mitsamt den Parametern, übergeben:
bash /home/user/addi 2 3
Mithilfe des Kommandos source:
source /home/user/addi 5 9
Aus der Textdatei ein ausführbares Shell-Skript machen. Dafür sind zwei Schritte notwendig: Als erstes muss die Datei als "ausführbar" markiert werden.
# chmod 700 addi
Dann muss die Shebangzeile in der Datei eingefügt werden. Diese zeigt an, welche Umgebung das Skript benötigt.
#/bin/bash
Das Skript kann nun ausgeführt werden:
addi 4 4 Die Summe aus 4 und 4 ist 8.
Speicherort eines Skripts
| Verzeichnis | Bedeutung | 
|---|---|
| /bin | Hier kommen die Programme hin, die aus der Distribution kommen und von apt installiert worden sind. Programme, die von Benutzer genutzt werden können. | 
| /sbin | Hier kommen die Programme hin, die aus der Distribution kommen und von apt installiert worden sind. Programme, die nur root benutzen kann. | 
| /usr/bin | Ähnlich wie /bin | 
| /usr/sbin | Ähnlich wie /sbin | 
| /opt | Hier kommen die Programme hin, die von apt heruntergeladen und installiert worden sind, aber nicht von der Distribution kommen. | 
| /usr/local/bin | Hier kommen selbst kompilierte Programme hinein. | 
| /usr/local/sbin | Hier kommen selbst kompilierte Programme hinein, die nur root ausführen darf. | 
- Selbst geschriebene Skripte sollten aus diesem Sinne in den Ordner /usr/local/bin gelegt werden.
Übergabevariablen und Rückgabewerte
Einige Variablen haben festgelegte Werte. Ein Beispiel:
#!/bin/bash #Gibt Variablen aus echo Das script wurde mit $0 gestartet. echo Sie haben $# Parameter übergeben. echo Der erste Übergabewert war $1. echo Der zweite Übergabewer war $2. Murks echo Der aktuelle Errorlevel ist $?. exit 0
Das script wurde mit /home/user/bin/varia gestartet. Sie haben 2 Parameter übergeben. Der erste Übergabewert war 59. Der zweite Übergabewert war 33. /home/user/bin/varia: Zeile 7: Murks: Kommando nicht gefunden. Der aktuelle Errorlevel ist 127.
- Die Variable $0 enthält den Namen des aufrufenden Programms.
- Die Variable $# zeigt die Anzahl der übergebenen Parameter an.
- $1 und $2 sind Übergabewerte
- $? zeigt den Errorlevel des zuletzt aufgerufen Kommandos an.
Weitere Shell-Kommandos
while,let,do,done,test,shift
#!/bin/bash
#Addiert beliebig viele Zahlen
summe=0
while test $# -gt 0
   do
       let summe=summe+$1
       shift
   done
echo Die Summe ihrer Eingaben ist $summe
unset summe
exit 0
- Eine while-do-done Schleife
- Nach do folgen Anweisungen, die sich wiederholen. Mit done wird die Sequenz beendet und es beginnt von vorne.
- shift verschiebt die Übergabewerte. D.h. aus $2 wird $1, aus $3 wird $2 und so weiter.
- while test $# -gt 0ist eine Abbruchbedingung und bedeutet in etwa:"Solange die Anzahl der verbleibenden Übergabewerte größer als null ist, dann ..."
Die Ausführung und Ausgabe sieht so aus:
$ betteraddi 7 3 6 4 2 7 9 Die Summe ihrer Eingaben ist 38
- Man kann test auch durch eckige Klammern ersetzen: while [ $# -gt 0 ]
- Der Befehl test hat viele Optionen und Parameter, hier ein kleiner Ausschnitt
Option 
Beschreibung
  
-r <Datei> 
Datei existiert und ist lesbar
  
-w <Datei> 
Datei existiert und ist beschreibbar
  
-d <Datei> 
Datei existiert und ist ein Verzeichnis
  
-u <Datei> 
Datei exisitert und das SUID-Bit ist gesetzt
  
-f <Datei> 
Datei existiert und ist eine normale Datei
  
Man kann mit test ach zwei Werte und Dateien vergleichen
  
<Datei1> -nt <Datei2> 
Datei 1 ist neuer als Datei 2
  
<Wert1> -eq <Wert2> 
Wert 1 ist gleich Wert 2