$ bash < ex1
Kann einlesen
ex1einprogrammieren und ausführen
Seine allgemeine Form ist:
$ Bash-Skriptname [Parameter]
Zum Beispiel:
$ bash ex2 /usr/meng /usr/zhang
Der Ausführungsprozess ist der gleiche wie bei der vorherigen Methode, der Vorteil dieser Methode besteht jedoch darin, dass sie Parameter nach dem Skriptnamen haben kann, wodurch die Parameterwerte an die Befehle im Programm übergeben werden, sodass ein Shell-Skript dies tun kann Behandeln Sie mehrere Situationen wie eine Funktion. Beim Aufruf können die entsprechenden tatsächlichen Parameter entsprechend dem spezifischen Problem übergeben werden.
Wenn Sie mit der aktuellen Shell beginnen (beginnend mit
·Mittel) Um ein Shell-Skript auszuführen, können Sie das folgende einfache Formular verwenden:
$ · ex3 [Parameter]
Legen Sie die Berechtigungen des Shell-Skripts auf „Ausführbar“ fest und führen Sie es dann direkt an der Eingabeaufforderung aus.
Spezifische Methoden:
$ chmod a+x ex4$ ./ex4
Diese Anforderung gibt beispielsweise am Anfang des Shell-Skripts die spezifische Shell an, die das Skript ausführt
/bin/bash:
#!/bin/bash
Die Shell empfängt den vom Benutzer eingegebenen Befehl (Skriptnamen) und analysiert ihn. Wenn die Datei als ausführbar markiert ist, aber kein kompiliertes Programm ist, betrachtet die Shell sie als Shell-Skript. Die Shell liest den Inhalt, interpretiert ihn und führt ihn aus. Aus der Sicht des Benutzers ähnelt die Ausführung eines Shell-Skripts also der Ausführung einer regulären ausführbaren Datei.
Daher können sich vom Benutzer entwickelte Shell-Skripte in einem Verzeichnis im Befehlssuchpfad befinden (normalerweise).
/bin,
/usr/binusw.), verwenden Sie es wie einen normalen Befehl. Auf diese Weise entwickeln Sie Ihre eigenen neuen Befehle. Diese Methode ist praktischer, wenn Sie das vorbereitete Shell-Skript wiederholt verwenden möchten.
Sie können das Ausführungsergebnis eines Befehls einer Variablen zuweisen. Es gibt zwei Formen der Befehlsersetzung: Eine besteht darin, Backticks zu verwenden, um den Befehl zu zitieren. Die allgemeine Form lautet:
Befehlsliste.
Beispiel: Speichern Sie den vollständigen Pfadnamen des aktuellen Arbeitsverzeichnisses in der Variablen dir und geben Sie die folgende Befehlszeile ein:
$ dir=`pwd`
Eine andere Form ist:
$(Befehlsliste). Die obige Befehlszeile kann auch wie folgt umgeschrieben werden:
$dir=$(pwd)
BashEs werden nur eindimensionale Arrays bereitgestellt und die Größe des Arrays ist nicht begrenzt. Ähnlich wie bei der C-Sprache werden die Indizes von Array-Elementen beginnend bei 0 nummeriert. Um Elemente in einem Array abzurufen, verwenden Sie Indizes. Der Index kann eine Ganzzahl oder ein arithmetischer Ausdruck sein und sein Wert sollte größer oder gleich 0 sein. Benutzer können Zuweisungsanweisungen verwenden, um Array-Variablen Werte zuzuweisen.
Die allgemeine Form der Zuweisung von Werten zu Array-Elementen ist:
Array-Name [Index] = Wert,Zum Beispiel:
$ city[0]=Peking$ city[1]=Shanghai$ city[2]=Tianjin
Kann auch verwendet werden
erklärenDer Befehl deklariert explizit ein Array, die allgemeine Form ist:
$ deklarieren -a Array-Namen
Das allgemeine Format zum Lesen von Array-Elementwerten ist:
${Array-Name[Subscript]},Zum Beispiel:
$ echo ${city[0]}Peking
Jedes Element eines Arrays kann mit der oben beschriebenen Methode Element für Element zugewiesen werden, oder es kann in Kombination zugewiesen werden. Die allgemeine Form, ein Array zu definieren und ihm einen Anfangswert zuzuweisen, ist:
Array-Name = (Wert 1 Wert 2 ... Wert n)
Jeder Wert wird durch Leerzeichen getrennt. Zum Beispiel:
$ A=(dies ist ein Beispiel eines Shell-Skripts)$ echo ${A[0]} ${A[2]} ${A[3]} ${A[6]}dies ist ein Beispielskript$ echo ${ A[8]}
Da die Wertetabelle 7 Anfangswerte enthält, also
ADie Anzahl der Elemente beträgt ebenfalls 7.
A[8]Überschreitet das zugewiesene Array
ABereich, wird es als neues Element betrachtet, da im Voraus kein Wert zugewiesen wurde, ist sein Wert eine leere Zeichenfolge.
Wenn der Index des Array-Elements nicht angegeben ist, stellt der Array-Name das Array-Element mit dem Index 0 dar, z
Stadtist äquivalent zu
Stadt[0].
verwenden
*oder
@Bei der Subskription werden alle Elemente im Array ersetzt.
$ echo ${A[*]}Dies ist ein Beispiel für ein Shell-Skript
$ echo ${#A[*]}7
Wenn Sie eine Shell schreiben möchten, um die Summe zweier Zahlen zu ermitteln, wie können Sie dies implementieren? Um die Verwendung der Parameterübergabe einzuführen, schreiben Sie ein Skript wie dieses:
$ cat > addlet sum=$1+$2echo $sum
Führen Sie nach dem Speichern Folgendes aus:
$ chmod a+x ./add$ ./add 5 1015
Es ist ersichtlich, dass 5 und 10 weitergegeben werden
1 $Und
2 $Dies ist die eigene voreingestellte Parameterreihenfolge der Shell. Tatsächlich können Sie die Variablen auch zuerst definieren und sie dann übergeben.
Ändern Sie beispielsweise das obige Skript, um Folgendes zu erhalten:
sei sum=$X+$Yecho $sum
Nochmals ausführen:
$ X=5 Y=10 ./add15
Es kann festgestellt werden, dass auch die richtigen Ergebnisse erzielt werden können.
Exportieren Sie eine Umgebungsvariable:
$ export opid=True
Das ist alles. Wenn Sie möchten, dass es nach der Anmeldung wirksam wird, können Sie es direkt hinzufügen
/etc/profileoder
~/.bashrcInnen.
kann passieren
lesenUm beispielsweise einen Variablenwert zu lesen und darauf zu warten, dass der Benutzer einen Wert eingibt und ihn anzeigt:
$ read -p Bitte geben Sie einen Wert ein: input ; echo Sie haben einen Wert eingegeben: $input Bitte geben Sie einen Wert ein: 21500 Sie haben einen Wert eingegeben: 21500
Einige wichtige Shell-Variablen sollten nach der Zuweisung nicht geändert werden, sodass Sie sie festlegen können
schreibgeschützt:
$ oracle_home=/usr/oracle7/bin$ readonly oracle_home
Grammatik:
TestausdruckGibt „true“ zurück, wenn der Ausdruck wahr ist, andernfalls wird „false“ zurückgegeben.
Zunächst werden die bei numerischen Vergleichen gebräuchlichen Vergleichssymbole angegeben:
-eg =; -ne !=; -ge >=;
$ test var1 -gt var2
Ob die Datei lesbar, beschreibbar und ausführbar ist, hängt davon ab, ob es sich um eine gewöhnliche Datei und ob es sich um ein Verzeichnis handelt:
-r; -w; -x;
$ test -r Dateiname
Die Länge der Zeichenfolge ist Null:
-z; ungleich Null:-N,wie:
$ test -z s1
wenn Zeichenfolge
s1Die Länge ist Null und gibt true zurück.
gleich
s1=s2; nicht gleichs1!=s2
Es gibt eine andere Möglichkeit, Zeichenfolgen zu vergleichen (Sie können sie in lexikografischer Reihenfolge vergleichen):
$ if [[ 'abcde' < 'abcdf' ]] dann echo ja, wie erwartet, ja
Mit diesem Befehl können folgende Vorgänge ausgeführt werden:
Arithmetische Operationen:
+ - * / %;Logische Operation:= ! < <= > >=
wie:
$ i=5;expr $i+5
Zusätzlich,
v. Christ ein Befehlszeilenrechner, der einige arithmetische Berechnungen durchführen kann.
WennBefehlsbeispiel: Wenn der erste Parameter ein allgemeiner Dateiname ist, drucken Sie die Datei in Seiten aus. Wenn es sich um einen Verzeichnisnamen handelt, geben Sie das Verzeichnis ein und drucken Sie alle Dateien im Verzeichnis aus relevante Informationen.
if test -f $1then pr $1>/dev/lp0elif test-d $1then (cd $1;pr *>/dev/lp0)else echo $1 ist weder eine Datei noch ein Verzeichnisfi
FallDer Befehl ist ein mehrwegiger Verzweigungsbefehl, der auf Mustervergleich basiert. Im Folgenden wird basierend auf der Tastatureingabe des Benutzers bestimmt, welcher Befehlssatz als nächstes ausgeführt wird.
while [ $reply!=y ] && [ $reply!=Y ] #Die Schleifenanweisung, die wir unten lernen werden, gibt ein Echo zurück nMöchten Sie fortfahren?(J/N)c Antwort lesen #Lesen Sie die Tastaturhülle $replay in ( y|Y) break;; #Verlassen Sie die Schleife (n|N) echo nnTerminatingn exit 0;; *) echo nnBitte antworten Sie mit y oder n continue; #Kehren Sie direkt zur inneren Schleife zurück und starten Sie um fortzufahren esacdone
Grammatik:
while/until Befehlsliste 1do Befehlsliste 2done
Der Unterschied besteht darin, dass ersterer nach der Ausführung von Befehlstabelle 1 ausgeführt wird, wenn der Exit-Status Null ist
TunDie folgende Befehlsliste 2 kehrt dann zum Ausgangspunkt zurück und führt nach der Ausführung von Befehlsliste 1 nur dann ähnliche Vorgänge aus, wenn der Exit-Status ungleich Null ist. Gleiches Beispiel wie oben.
Grammatik:
Führen Sie für den Variablennamen in der Zeichenfolgentabelle die Befehlstabelle aus
Beispiel:
FILE=test1.c myfile1.f pccn.hfor i in $FILEdo cd ./tmp cp $i $i.old echo $idone kopiert
Schauen wir uns nun die Verwendung von Funktionen in Shell an. Schauen wir uns zunächst ein Beispiel an: Schreiben Sie eine Funktion und rufen Sie sie dann zur Anzeige auf
Hallo, Welt!
$ cat > show# Funktionsdefinition function show{ echo $1$2;}H=Hello,W=World!# Rufen Sie die Funktion auf und übergeben Sie zwei Parameter H und Wshow $H $W
Demo:
$ chmod 770 show$./showHello,World!
Hast du etwas Verdächtiges gesehen?
$ zeigen $H $W
Wir können dem Funktionsnamen direkt die tatsächlichen Parameter folgen.
Die Reihenfolge der tatsächlichen Parameter entspricht den „virtuellen Parametern“
1 $, 2 $, 3 $…
Hinweis: Wenn Sie einen Parameter übergeben möchten, was sollten Sie tun, wenn sich in der Mitte des Parameters Leerzeichen befinden? Probieren Sie es zunächst einmal aus.
anzuzeigen
Hallo Welt(Zwischen den beiden Wörtern steht ein Leerzeichen)
Funktion show{ echo $1}HW=Hallo Worldshow $HW
Wenn direkt
$HW anzeigen, definitiv nicht möglich, weil
1 $Nur erhalten
Hallo, sodass die Ergebnisse nur angezeigt werden
HalloDer Grund dafür ist, dass String-Variablen verwendet werden müssen Halte es ein.
Wenn Sie interessiert sind, lernen Sie weiter!
Es warten viele mächtige Dinge auf Sie, wie zum Beispiel
schneiden,
Ausdruck,
sed,
awkusw.