OnWorks Linux- und Windows-Online-WorkStations

Logo

Kostenloses Online-Hosting für WorkStations

<Zurück | Inhalte | Weiter>

Wenn Sie möchten, können Eingabeaufforderungen Shell-Skripte ausführen und sich unter verschiedenen Bedingungen unterschiedlich verhalten. Sie können die Eingabeaufforderung sogar jedes Mal, wenn Sie einen Befehl erteilen, eine Melodie abspielen lassen, obwohl dies schnell langweilig wird. Weitere Informationen finden Sie im Bash-Prompt HOWTO.


Image

7.2.5. Shell-Skripte


7.2.5.1. Was sind Skripte?


Ein Shell-Skript ist, wie wir in den Shell-Konfigurationsbeispielen gesehen haben, eine Textdatei, die Shell-Befehle enthält. Wenn eine solche Datei beim Aufrufen von Bash als erstes Nicht-Optionsargument verwendet wird und weder die -c noch -s Wenn die Option bereitgestellt wird, liest Bash Befehle aus der Datei, führt sie aus und wird dann beendet. Durch diese Betriebsart entsteht ein

nicht interaktive Shell. Wenn Bash ein Shell-Skript ausführt, legt es den speziellen Parameter fest 0 auf den Namen der Datei und nicht auf den Namen der Shell, und die Positionsparameter (alles, was auf den Namen des Skripts folgt) werden auf die verbleibenden Argumente gesetzt, falls welche angegeben sind. Wenn keine zusätzlichen Argumente angegeben werden, werden die Positionsparameter nicht gesetzt.


Ein Shell-Skript kann mithilfe von ausführbar gemacht werden chmod Befehl zum Aktivieren des Ausführungsbits. Wenn Bash beim Durchsuchen eine solche Datei findet PATH Für einen Befehl wird eine Sub-Shell erzeugt, um ihn auszuführen. Mit anderen Worten: Ausführen


Dateinamen ARGUMENTE


ist gleichbedeutend mit ausführen


bash Dateiname ARGUMENTE


wenn „Dateiname“ ein ausführbares Shell-Skript ist. Diese Unter-Shell initialisiert sich selbst neu, sodass der Effekt so ist, als ob eine neue Shell aufgerufen worden wäre, um das Skript zu interpretieren, mit der Ausnahme, dass die Speicherorte der Befehle von der übergeordneten Shell gespeichert wurden (siehe Hash- auf den Infoseiten) bleiben vom Kind erhalten.


Die meisten UNIX-Versionen machen dies zu einem Teil des Befehlsausführungsmechanismus des Betriebssystems. Wenn die erste Zeile eines Skripts mit den beiden Zeichen „#!“ beginnt, gibt der Rest der Zeile einen Interpreter für das Programm an. So können Sie angeben bash, awk, perl oder einen anderen Interpreter oder eine andere Shell und schreiben Sie den Rest der Skriptdatei in dieser Sprache.


Die Argumente für den Interpreter bestehen aus einem einzelnen optionalen Argument, das auf den Namen des Interpreters in der ersten Zeile der Skriptdatei folgt, gefolgt vom Namen der Skriptdatei, gefolgt von den restlichen Argumenten. Bash führt diese Aktion auf Betriebssystemen aus, die sie nicht selbst verarbeiten.


Bash-Skripte beginnen oft mit


#! / bin / bash (vorausgesetzt, dass Bash installiert wurde /Behälter), da dadurch sichergestellt wird, dass Bash zur Interpretation des Skripts verwendet wird, auch wenn es unter einer anderen Shell ausgeführt wird.


Image


7.2.5.2. Einige einfache Beispiele


Ein sehr einfaches Skript, das nur aus einem Befehl besteht und dem Benutzer, der es ausführt, „Hallo“ sagt:


[jerry@nowhere ~] Katze hallo.sh

#! / Bin / bash

echo „Hallo $USER“

[jerry@nowhere ~] Katze hallo.sh

#! / Bin / bash

echo „Hallo $USER“

Das Skript besteht eigentlich nur aus einem Befehl, Echo, der das benutzt Wert von ($) die USER Umgebungsvariable zum Drucken einer Zeichenfolge, die an den Benutzer angepasst ist, der den Befehl ausgibt.


Ein weiterer Einzeiler, der zur Anzeige verbundener Benutzer verwendet wird:


#! / Bin / bash

wer | schneiden -d " " -f 1 | sortieren -u

#! / Bin / bash

wer | schneiden -d " " -f 1 | sortieren -u

Hier ist ein Skript bestehend aus einigen weiteren Zeilen, mit dem ich Sicherungskopien aller Dateien in einem Verzeichnis erstelle. Das Skript erstellt zunächst eine Liste aller Dateien im aktuellen Verzeichnis und fügt sie in die Variable ein LISTE. Dann legt es den Namen der Kopie für jede Datei fest und kopiert dann die Datei. Für jede Datei wird eine Meldung gedruckt:


bis:~> cat bin/makebackupfiles.sh

#! / Bin / bash

# Kopien aller Dateien in einem Verzeichnis erstellen LIST=`ls`

für i in $LIST; Tun

ORIG=$i

DEST=$i.old

cp $ORIG $DEST echo „kopierte $i“

erledigt

bis:~> cat bin/makebackupfiles.sh

#! / Bin / bash

# Kopien aller Dateien in einem Verzeichnis erstellen LIST=`ls`

für i in $LIST; Tun

ORIG=$i

DEST=$i.old

cp $ORIG $DEST echo „kopierte $i“

erledigt

Geben Sie einfach eine Zeile ein wie mv * *.alt wird nicht funktionieren, wie Sie feststellen werden, wenn Sie dies an einer Reihe von Testdateien versuchen. Ein Echo Der Befehl wurde hinzugefügt, um einige Aktivitäten anzuzeigen. Echosind im Allgemeinen nützlich, wenn ein Skript nicht funktioniert: Fügen Sie nach jedem zweifelhaften Schritt einen ein, und Sie werden den Fehler im Handumdrehen finden.


Das /etc/rc.d/init.d Das Verzeichnis enthält jede Menge Beispiele. Schauen wir uns dieses Skript an, das den fiktiven ICanSeeYou-Server steuert:


# / Bin / sh

# Beschreibung: Mit ICanSeeYou können Sie vernetzte Personen sehen


# Prozessname: ICanSeeYou

# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid

# config: /etc/ICanSeeYou.cfg


# Quellfunktionsbibliothek.

. /etc/rc.d/init.d/functions


# Sehen Sie, wie (mit welchen Argumenten) wir aufgerufen wurden. Fall „$1“ in

Anfang)

echo -n „Startet ICanSeeYou:“ Daemon ICanSeeYou

Echo

Berühren Sie /var/lock/subsys/ICanSeeYou

;;

halt)

echo -n „ICanSeeYou wird heruntergefahren:“

# / Bin / sh

# Beschreibung: Mit ICanSeeYou können Sie vernetzte Personen sehen


# Prozessname: ICanSeeYou

# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid

# config: /etc/ICanSeeYou.cfg


# Quellfunktionsbibliothek.

. /etc/rc.d/init.d/functions


# Sehen Sie, wie (mit welchen Argumenten) wir aufgerufen wurden. Fall „$1“ in

Anfang)

echo -n „Startet ICanSeeYou:“ Daemon ICanSeeYou

Echo

Berühren Sie /var/lock/subsys/ICanSeeYou

;;

halt)

echo -n „ICanSeeYou wird heruntergefahren:“


killproc ICanSeeYou echo

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

Status)

Status ICanSeeYou

;;

Neustart)

0 $ Stopp

0 $ Start

;;

*)

echo „Verwendung: $0 {start|stop|restart|status}“ Exit 1

esac


Beenden Sie 0

killproc ICanSeeYou echo

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

Status)

Status ICanSeeYou

;;

Neustart)

0 $ Stopp

0 $ Start

;;

*)

echo „Verwendung: $0 {start|stop|restart|status}“ Exit 1

esac


Beenden Sie 0

Erstens mit dem . Befehl (Punkt) eine Reihe von Shell-Funktionen, die von fast allen Shell-Skripten in verwendet werden

/etc/rc.d/init.d, ist geladen. Dann ein Häuser Es wird ein Befehl ausgegeben, der vier verschiedene Arten definiert, wie das Skript ausgeführt werden kann. Ein Beispiel könnte sein Ich kann dich sehen Anfang. Die Entscheidung, welcher Fall angewendet werden soll, wird durch Lesen des (ersten) Arguments des Skripts mit dem Ausdruck getroffen $1.


Wenn keine konforme Eingabe erfolgt, wird der mit einem Sternchen markierte Standardfall angewendet, woraufhin das Skript eine Fehlermeldung ausgibt. Der Häuser Die Liste endet mit dem esac Stellungnahme. Im Anfang In diesem Fall wird das Serverprogramm als Daemon gestartet und eine Prozess-ID und eine Sperre zugewiesen. Im halt In diesem Fall wird der Serverprozess aufgespürt und gestoppt sowie die Sperre und die PID entfernt. Optionen, wie z Daemon Option und Funktionen wie killproc, sind in der definiert /etc/rc.d/init.d/functions Datei. Dieses Setup ist spezifisch für die in diesem Beispiel verwendete Distribution. Die Initskripte auf Ihrem System verwenden möglicherweise andere, in anderen Dateien definierte oder gar keine Funktionen.


Bei Erfolg gibt das Skript einen Exit-Code von Null an sein übergeordnetes Skript zurück.


Dieses Skript ist ein gutes Beispiel für die Verwendung von Funktionen, die das Skript leichter lesbar machen und die Arbeit schneller erledigen. Beachten Sie, dass sie verwenden sh statt bash, um sie auf einem breiteren Spektrum von Systemen nützlich zu machen. Auf einem Linux-System, Aufruf bash as sh führt dazu, dass die Shell im POSIX-kompatiblen Modus ausgeführt wird.


Top OS Cloud Computing bei OnWorks: