Shell
= Schnittstelle vom Betriebssystem zum Anwender.
Aufgaben: - Kommandointerpreter ( unter Windows: command.com) - Programmierung (z.B. Sicherungsabläufe, Konfigurationen, Steuerung der Hardware)
Shell Programme: - bash - sh - ash - ksh - csh (diese Varianten sind von der Konsole aus über Eingabe der Namen aufrufbar)
Bash Befehle: - $0 = Anzeige der Variante - echo $BASH_VERSION (Versionsangabe) - $ = eine Variable. Alle Variablen in "Großbuchstaben" sind zu 99% Systemvariablen
- echo = Ausgabe z.B. echo hallo -> hallo - Befehlswiederholungen: Pfeil rauf und runter - Einsatz von zusätzlichen Zeichen Pfeil rechts und links - Zeichen löschen: entf Taste; Rückgabetaste - Alt+d = Zeichenkette, Wort löschen - Strg+k = ab Schreibmarke Zeile löschen - Expansion z.B. f und 2 mal Tab = Auflistung aller Befehle, die mit f anfangen - Strg+l = Bildschirminhalt löschen (clear) - Strg+r = Befehl suchen (reverse-i-search) dann Eingabe des Befehls -> eingesetzter Befehl wird angezeigt (ist während der gesamten Sitzung im Speicher)
- find = suchen von Texten, Dateien, Berechtigungen und zeitgesteuerte Infos
find (Suche nach Datei- oder Verzeichnisinhalten)
BSP 1: find / -name *.conf (Auflistung aller Konfigurations Dateien im System)
BSP 2: find / -name *.conf | grep etc (Auflistung aller Konfigurations Dateien im Verzeichnis etc aber auch in einer Zeichenkette z.B. /usr/share/doc/packages/fetchmail/contrib/gotmail.conf)
- | = Pipe Verketten 2-er Befehle, wobei eine Ausgabe erzeugt werden muss; Befehl1 | Befehl2
grep (suche nach Dateien)
grep /etc/squid.donf http
Alias (Kurzform für Befehl) Aliasname =`kommando` (hier können Befehle selbst definiert werden; z.B.bei häufigen und auch langen Befehlen)
alias xxl=`find / -name *.conf | grep etc` dann Eingabe des Befehls (hier xxl)
Kommandosubstitution
Auf 2 Konsole zB YAST aufrufen, mit ps sich die PID anzeigen lassen (hier 1844)
a=1844 (Variable zuweisen)
echo $a > psid
cat psid ps cat `cat psid`
es erfolgt folgende Anzeige (liest Inhalt der PSID raus und sucht nach dem Wert 1844)
PID TTY STAT TIME COMMAND 1844 tty1 S 00:01 yast
kill `cat psid` (Prozess wird gestoppt)
Programm erstellen über Konsole kedit öffnen; a=7 echo $a
unter /root/prg1 speichern
Über Konsole mit ll Inhalt auflisten und die Rechte an der Datei ändern (chmod 744 prg1) Eingabe: ./prg1 Es erscheint die Ausgabe 7
Editor: kedit Variablen: Man unterscheidet: - numerische Variablen - alphabetische Variablen - lokale Variablen = nur för das Programm geltend - globale Variablen = gelten während der gesammten Arbeitssitzung
Set = Anzeige von globalen Variablen echo $PATH = (Auflistung der Pfadbeschreibung; ersichtlich an :)
Definition einer lokalen Variablen:(declare)
declare a=7
Definition einer globalen Variablen: (export)
export a=7
Beispielprogramm
# Variablen echo Übergabeparameter: $* (hier können z.B. schon Befehle mit eingegeben werden) echo user ist: $user (aktueller Benutzer) echo shell ist: $SHELL (aktuelle Shell) echo Parameter 1 ist: $1 (ist Systemvariablen) echo Prozedurname ist: $0 (Ausgabe des Dateinamens) echo Prozessnummer ist: $$ (Ausgabe der Prozessnummer) echo Anzahl der Parameter ist: $# (Ausgabe der Anzahl der Parameter) a=17.89 # ohne Lücken am = Zeichen (Ausgabe der Zahl mit . da engl. Schreibweise) echo a ist $a
Speichern unter /root/einfach
Datei über Konsole aufrufen chmod 744 einfach (zum ändern der Rechte eingeben)
Datei aufrufen: ./einfach
es kommt folgende Ausgabe: UÜbergabeparameter: user ist: shell ist: /bin/bash Parameter 1 ist: Prozedurname ist: ./einfach Prozessnummer ist: 2038 Anzahl der Parameter ist: 0 a ist 17.89
Datei aufrufen:
./einfach abc 123 xyz
UÜbergabeparameter: abc 123 xyz user ist: shell ist: /bin/bash Parameter 1 ist: abc Prozedurname ist: ./einfach Prozessnummer ist: 2039 Anzahl der Parameter ist: 3 a ist 17.89
Kommentar Wird mit # und Text ausgewiesen. Der Kommentar ist sinnvoll, damit eine kurze Beschreibung des Programms ersichtlich wird.
#! /bin/sh Ist Kommentar für Shell
Verzweigungen if/then/else
if Bedingung; then Kommandos Kommandos ... [elif Bedingung; then Kommandos] {Sind manchmal notwendig aber träger, Kombination zw Else und IF} [else] [Kommando] (Optional) fi
Bedingung: immer in [ ] setzen und mit Leerzeichen vor Zeichenkette; Zeichenkette immer in " " wahr oder unwahr= [ Zeichenkette1 = Zeichenkette2 ] oder [ Zeichenkette1 != Zeichenkette2 ]
alphabetische Bedingungen:
= Gleichheit != Ungleichheit
numerische Bedinungen:
-lt > (lower then; größer als) -gt < (greater then; kleiner als) -le <= (lower equal; kleiner/gleich) -ge >= (greater equal; größer/gleich) -eq = (equal; gleich) -ne != (not equal; nicht gleich)
und/oder:
[[ Bedingung1 ] -a [ Bedingung2 ]] {a=and}
[[ Bedingung1 ] -o [ Bedingung2 ]] {o=or}
Beispiel:
#! /bin/sh # Interaktive Eingabe, if-Abfrage echo Hallo, user, alles in Ordnung? echo Ihre Antwort, n/j: read answer {lesen von Variable;nicht mehr als 16 Zeichen haben, dt. Namen; keine Umlaute} echo Ihre Antwort war $answer # if ["$answer" = "j" ] if [ "$answer" != "n" ] then echo ja else echo nein fi
Mehrfach Verzweigungen CASE
case Variable in muster1) Kommandos;; muster2) Kommandos;;{doppelte; zum Beenden der Befehlszeile, einfach ; Auflistung mehrerer Befehle}
esac
Beispiel #! /bin/sh # Interaktive Eingabe, Mehrfachunterscheidung (case) echo Alles in Ordnung? echo Ihre Antwort: read answer echo Ihre Antwort war: $answer case $answer in j* | J* | y* | Y*) echo jawohl;; n* | N+) echo nein, ueberhaupt nicht!;; *) echo das war wohl nichts;; esac
Schleifen (Kontrollstruktur innerhalb eines Programms, die Anweisungen wiederholen
while oder until Bedingung; do Kommandos
done
Beispiel
i=1 while [ "$i" -le 5 ] do echo $i i=$[$i+1] done
weitere Schleife
for var in liste do kommando kommando ... done
Beispiel #for Schleife x=a for $x in a b c; do echo $x done
Kombination
i=1 while [ "$i" -le 5 ] do echo Alles in Ordnung? echo Ihre Antwort: read answer echo Ihre Antwort war: $answer case $answer in j* | J* | y* | Y*) echo jawohl;; n* | N+) echo nein, ueberhaupt nicht!;; *) echo das war wohl nichts;; esac i=$[$1+1] done
weiteres Beispiel: Kombination while [ "$antwort" != "x" ]; do echo " Menueauswahl" echo " 1 -> Inhaltsverzeichnis" echo " 2 -> Benutzerübersicht" echo " 3 -> Pfadanzeige" echo " x -> Beenden" read antwort case $antwort in 1) ls -l; sleep 3;; 2) who; sleep 3;; 3) pwd; sleep 3;; esac done
|