Ähnlich zu unseren fortlaufenden Unix Sed- und Unix Awk-Serien werden wir mehrere Artikel über Bash-Skripting veröffentlichen, die alle Bash-Scripting-Techniken mit praktischen Beispielen abdeckt.
Shell ist ein Programm, das Benutzerbefehle interpretiert. Die Befehle werden entweder direkt vom Benutzer eingegeben oder aus einer Datei gelesen, die als Shell-Skript bezeichnet wird.
Shell wird als interaktive Shell bezeichnet, wenn sie die Eingaben des Benutzers direkt liest.
Shell wird als nicht interaktive Shell bezeichnet, wenn sie Befehle aus einer Datei liest und ausführt. In diesem Fall liest die Shell jede Zeile einer Skriptdatei von oben nach unten und führt jeden Befehl so aus, als ob er direkt vom Benutzer eingegeben worden wäre.
Gibt den Wert der eingebauten Shell-Variablen $- aus, um zu wissen, ob die Shell interaktiv oder nicht interaktiv ist.
# echo $- himBH
Hinweis:Die Variable $- enthält ein „i“, wenn die Shell interaktiv ist .
Unix hat verschiedene Shells. Bourne-Shell (sh), Bourne Again-Shell (bash), C-Shell (csh), Korn-Shell (ksh), Tenex-C-Shell (tcsh). Verwenden Sie die Unix-Befehle which oder whereis, um herauszufinden, wo sich eine bestimmte Shell befindet, wie unten gezeigt.
# which bash /bin/bash # whereis bash bash: /bin/bash /usr/share/man/man1/bash.1.gz
Sie können zwischen den Shells wechseln, indem Sie den Shell-Namen eingeben. Geben Sie beispielsweise csh ein, um zur C-Shell zu wechseln.
Schreiben und Ausführen von Shell-Skripten
Beispiel 1. Hello World Bash-Skript
- Erstellen Sie ein Skript, indem Sie die folgenden zwei Zeilen mit Ihrem bevorzugten Editor in eine Datei eingeben.
- Sie können einen beliebigen Namen für die Datei wählen. Der Dateiname sollte nicht mit einem der integrierten Unix-Befehle identisch sein.
- Das Skript beginnt immer mit den beiden Zeichen „#!“, die als She-Bang bezeichnet werden. Dies zeigt an, dass die Datei ein Skript ist und mit dem Interpreter (/bin/bash) ausgeführt werden sollte, der durch den Rest der ersten Zeile in der Datei angegeben ist.
- Führen Sie das Skript wie unten gezeigt aus. Wenn Sie Probleme beim Ausführen eines Shell-Skripts haben, lesen Sie das Tutorial zur Ausführung von Shell-Skripts
- Wenn Sie den Befehl „bash helloworld.sh“ ausführen, startet er die nicht-interaktive Shell und übergibt ihr den Dateinamen als Argument.
- Die erste Zeile teilt dem Betriebssystem mit, welche Shell erzeugt werden soll, um das Skript auszuführen.
- Im obigen Beispiel Bash-Interpreter, der das Skript interpretiert und die Befehle nacheinander von oben nach unten ausführt.
- Sie können das Skript sogar ohne vorangestelltes „bash“ ausführen durch:
- Ändern Sie die Berechtigung für das Skript, damit Sie (Benutzer) es ausführen können, indem Sie den Befehl „chmod u+x helloworld.sh“ verwenden.
- Das Verzeichnis, das das Skript enthält, sollte in der PATH-Umgebungsvariable enthalten sein. Wenn nicht enthalten, können Sie das Skript ausführen, indem Sie den absoluten Pfad des Skripts angeben.
- echo ist ein Befehl, der einfach das Argument ausgibt, das wir ihm geben. Es wird auch verwendet, um den Wert der Variablen zu drucken.
$ cat helloworld.sh #!/bin/bash echo Hello World
$ bash helloworld.sh Hello World
Bash-Startup-Dateien
Wie wir bereits in unserem Artikel über die Ausführungssequenz für .bash_profile und verwandte Dateien besprochen haben, liest und führt die Bash, wenn sie als interaktive Shell aufgerufen wird, zuerst Befehle aus /etc/profile. Wenn /etc/profile nicht existiert, liest es die Befehle von ~/.bash_profile, ~/.bash_login und ~/.profile in der angegebenen Reihenfolge und führt sie aus. Die Option –noprofile kann verwendet werden, wenn die Shell gestartet wird, um dieses Verhalten zu verhindern.
Normalerweise führt Ihr bash_profile ~/.bashrc aus. Wenn Sie möchten, können Sie eine Willkommensnachricht anzeigen. Dies wird nur ausgeführt, wenn Sie sich zum ersten Mal anmelden. Sie können die Variablen nach Belieben exportieren und die Aliase festlegen, die ausgeführt werden und verfügbar sind, sobald Sie die Shell geöffnet haben. Wenn eine Login-Shell beendet wird, liest Bash Befehle aus der Datei ~/.bash_logout.
und führt sie ausBeispiel 2. Drucken Sie eine Willkommensnachricht, wenn Sie sich anmelden
Geben Sie den folgenden Inhalt in Ihre bash_profile-Datei ein. Wenn die Datei nicht existiert, erstellen Sie eine Datei mit dem folgenden Inhalt.
$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname."
Wenn Sie sich bei einer interaktiven Shell anmelden, sehen Sie die unten gezeigten Willkommensnachrichten.
login as: root root@dev-db's password: Welcome on dev-db
Beispiel 3. Systembezogene Informationen drucken
Wenn Sie sich bei einer interaktiven Shell anmelden, können Sie den Namen des auf dem Server installierten Kernels, die Bash-Version, die Betriebszeit und die Zeit auf dem Server anzeigen.
$cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname." echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; date
Wenn Sie eine interaktive Shell starten, gibt sie die unten gezeigte Nachricht aus.
login as: root root@dev-db's password: Welcome on dev-db Kernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010
Beispiel 4. Letzte Anmeldedaten drucken
Wenn mehrere Benutzer denselben Computer mit derselben Anmeldung verwenden, sind Details wie der Computer, von dem aus die letzte Anmeldung erfolgt ist, und die Uhrzeit, zu der sie sich angemeldet haben, die nützlichsten Details. Dieses Beispiel gibt die letzten Anmeldedaten während des Starts einer interaktiven Shell aus.
$ cat ~/.bash_profile hname=`hostname` echo "Welcome on $hname."echo -e "Kernel Details: " `uname -smr` echo -e "`bash --version`" echo -ne "Uptime: "; uptime echo -ne "Server time : "; dateLetztes Protokoll | grep "root" | awk {'print "Letzte Anmeldung von:"$3
print "Datum und Uhrzeit der letzten Anmeldung:",$4,$5,$6,$7,$8,$9;}'
Während des Startvorgangs erhalten Sie die unten gezeigte Meldung.login as: root root@dev-db's password: Welcome on dev-dbKernel Information: Linux 2.6.18-128 x86_64 GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. Uptime: 11:24:01 up 21 days, 13:15, 3 users, load average: 0.08, 0.18, 0.11 Server time : Tue Feb 22 11:24:01 CET 2010Letzte Anmeldung von:sasikala-laptop
Datum und Uhrzeit der letzten Anmeldung:Dienstag, 22. Februar, 11:24:01 +0100 2010
Beispiel 5. Variablen exportieren und Aliase beim Start setzen
Die häufigsten Befehle, die Sie in Ihren .bashrc- und .bash_profile-Dateien verwenden werden, sind der Export- und der Alias-Befehl.
Ein Alias ersetzt einfach einen Textabschnitt durch einen anderen. Wenn Sie einen Alias ausführen, ersetzt er einfach das, was Sie eingegeben haben, durch das, was dem Alias entspricht. Wenn Sie beispielsweise einen Alias für den Befehl ls festlegen möchten, um die Dateien/Ordner mit den Farben aufzulisten, gehen Sie wie folgt vor:
alias ls 'ls --color=tty'Wenn Sie diesen Befehl zu einer der Startdateien hinzufügen, können Sie den Befehl ls ausführen, wo er automatisch durch den Befehl ls –color=tty ersetzt wird.
Der Befehl Export wird verwendet, um eine Umgebungsvariable festzulegen. Verschiedene Umgebungsvariablen werden vom System oder anderen Anwendungen verwendet. Sie sind einfach eine Möglichkeit, Parameter zu setzen, die jede Anwendung/jedes Skript lesen kann. Wenn Sie eine Variable ohne den Exportbefehl setzen, existiert diese Variable nur für diesen bestimmten Prozess.
Im folgenden Beispiel wird die Umgebungsvariable HISTSIZE exportiert. Die Zeile, die mit # beginnt, ist eine Kommentarzeile.
$ cat /etc/profile alias ls 'ls --color=tty' # Setup some environment variables. export HISTSIZE=1000 PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc export PATH export SVN_SH=${SVN_RSH-ssh}