Shell-Variablen
In der Shell-Programmierung ist eine Variable ein Name, der verwendet wird, um einen Datenwert zu speichern.
Beim Definieren einer Variablen enthält der Variablenname kein Dollarzeichen ($, wie es für Variablen in PHP erforderlich ist), zum Beispiel:
Beachten Sie, dass zwischen dem Variablennamen und dem Gleichheitszeichen keine Leerzeichen stehen dürfen, was sich von allen Programmiersprachen unterscheiden kann, mit denen Sie vertraut sind. Gleichzeitig muss die Benennung von Variablennamen die folgenden Regeln befolgen:
- Dürfen nur Buchstaben, Zahlen und Unterstriche enthalten:Variablennamen können Buchstaben (Groß-/Kleinschreibung wird unterschieden), Zahlen und Unterstriche enthalten_und dürfen keine anderen Sonderzeichen enthalten.
- Dürfen nicht mit einer Zahl beginnen:Variablennamen dürfen nicht mit einer Zahl beginnen, können aber Zahlen enthalten.
- Vermeiden Sie die Verwendung von Shell-Schlüsselwörtern:Verwenden Sie keine Shell-Schlüsselwörter (wie if, then, else, fi, for, while usw.) als Variablennamen, um Verwechslungen zu vermeiden.
- Verwenden Sie Großbuchstaben für Konstanten:Konventionsgemäß verwenden Variablennamen für Konstanten normalerweise Großbuchstaben, zum BeispielPI=3.14。
- Vermeiden Sie die Verwendung von Sonderzeichen:Versuchen Sie, Sonderzeichen in Variablennamen zu vermeiden, da sie mit der Shell-Syntax in Konflikt geraten können.
- Vermeiden Sie Leerzeichen:Variablennamen sollten keine Leerzeichen enthalten, da Leerzeichen normalerweise verwendet werden, um Befehle und Argumente zu trennen.
Gültige Beispiele für Shell-Variablennamen sind wie folgt:
EXAMPLE="www.example.com" LD_LIBRARY_PATH="/bin/" _var="123" var2="abc"
Ungültige Variablenbenennung:
# 避免使用if作为变量名 if="some_value" # 避免使用 $ 等特殊符号 variable_with_$=42 ?var=123 user*name=example # 避免空格 variable with space="value"
Vermeiden Sie Leerzeichen auf beiden Seiten des Gleichheitszeichens:
# 正确的赋值 variable_name=value # 有可能会导致错误 variable_name = value
Zusätzlich zur expliziten direkten Zuweisung können Sie auch Anweisungen verwenden, um Variablen Werte zuzuweisen, wie zum Beispiel:
oder
for file in $(ls /etc)
Die obige Anweisung verwendet eine Schleife, um die Dateinamen im Verzeichnis /etc aufzulisten.
Variablen verwenden
Um eine definierte Variable zu verwenden, fügen Sie einfach ein Dollarzeichen vor den Variablennamen ein, wie folgt:
Beispiel
echo $your_name
echo ${your_name}
Die geschweiften Klammern um den Variablennamen sind optional; du kannst sie hinzufügen oder nicht. Das Hinzufügen geschweifter Klammern hilft dem Interpreter, die Grenze der Variable zu erkennen, wie im folgenden Fall:
Beispiel
echo "I am good at ${skill}Script"
done
Wenn du der Variable skill keine geschweiften Klammern hinzufügst und echo "I am good at $skillScript" schreibst, behandelt der Interpreter $skillScript als Variable (mit einem leeren Wert), und das Ergebnis der Codeausführung wird nicht das sein, was wir erwartet haben.
Es wird empfohlen, bei allen Variablen geschweifte Klammern hinzuzufügen; das ist eine gute Programmiergewohnheit.
Eine definierte Variable kann neu definiert werden, wie zum Beispiel:
Beispiel
echo $your_name
your_name="alibaba"
echo $your_name
Das ist zulässig, aber beachte: Bei der zweiten Zuweisung darfst du nicht $your_name="alibaba" schreiben; das Dollarzeichen ($) fügst du nur hinzu, wenn du die Variable verwendest.
Schreibgeschützte Variablen
Mit dem Befehl readonly kann eine Variable als schreibgeschützte Variable definiert werden; der Wert einer schreibgeschützten Variable kann nicht geändert werden.
Das folgende Beispiel versucht, eine schreibgeschützte Variable zu ändern, was zu einem Fehler führt:
Beispiel
myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.example.com"
Führen Sie das Skript aus, das Ergebnis ist wie folgt:
/bin/sh: NAME: This variable is read only.
Variablen löschen
Verwenden Sie den Befehl unset, um eine Variable zu löschen. Syntax:
unset variable_name
Eine Variable kann nach dem Löschen nicht mehr verwendet werden. Der Befehl unset kann schreibgeschützte Variablen nicht löschen.
Beispiel
Beispiel
myUrl="https://www.example.com"
unset myUrl
echo $myUrl
Die Ausführung des obigen Beispiels erzeugt keine Ausgabe.
Variablentypen
Shell unterstützt verschiedene Arten von Variablen, und einige der wichtigsten Typen sind:
String-Variablen:In der Shell werden Variablen normalerweise als Strings behandelt.
Sie können einfache Anführungszeichen'oder doppelte Anführungszeichen"verwenden, um einen String zu definieren, zum Beispiel:
my_string='Hello, World!' 或者 my_string="Hello, World!"
Integer-Variablen: In einigen Shells können Sie den Befehldeclareodertypesetverwenden, um Integer-Variablen zu deklarieren.
Solche Variablen enthalten nur ganzzahlige Werte, zum Beispiel:
declare -i my_integer=42
Eine solche Deklaration weist die Shell an, my_integer als Integer zu behandeln. Wenn Sie versuchen, ihr einen nicht ganzzahligen Wert zuzuweisen, versucht die Shell, ihn in einen Integer umzuwandeln.
Array-Variablen:Shell unterstützt auch Arrays, mit denen Sie mehrere Werte in einer Variablen speichern können.
Arrays können integer-indizierte Arrays oder assoziative Arrays sein. Das folgende ist ein Beispiel für ein einfaches integer-indiziertes Array:
my_array=(1 2 3 4 5)
Oder assoziative Arrays:
declare -A associative_array associative_array["name"]="John" associative_array["age"]=30
Umgebungsvariablen:Dies sind spezielle Variablen, die vom Betriebssystem oder vom Benutzer festgelegt werden und dazu dienen, das Verhalten der Shell zu konfigurieren und ihre Ausführungsumgebung zu beeinflussen.
Zum Beispiel enthält die Variable PATH den Pfad, in dem das Betriebssystem nach ausführbaren Dateien sucht:
echo $PATH
Spezielle Variablen:Es gibt einige spezielle Variablen, die in der Shell eine besondere Bedeutung haben, wie z. B.$0den Namen des Skripts repräsentiert,$1, $2, usw. die Parameter des Skripts repräsentieren.
$#steht für die Anzahl der an das Skript übergebenen Parameter,$?steht für den Exit-Status des vorherigen Befehls, usw.
Shell-Zeichenketten
Zeichenketten sind der am häufigsten verwendete und nützlichste Datentyp in der Shell-Programmierung (abgesehen von Zahlen und Zeichenketten gibt es nicht viele andere Typen zur Verwendung). Zeichenketten können einfache Anführungszeichen, doppelte Anführungszeichen oder keine Anführungszeichen verwenden.
Einfache Anführungszeichen
str='this is a string'
Einschränkungen bei Zeichenketten in einfachen Anführungszeichen:
- Jedes Zeichen innerhalb einfacher Anführungszeichen wird wörtlich ausgegeben, und Variablen in Zeichenketten mit einfachen Anführungszeichen werden nicht expandiert;
- Ein einfaches Anführungszeichen kann nicht allein in einer Zeichenkette mit einfachen Anführungszeichen vorkommen (auch nicht, wenn Sie das einfache Anführungszeichen maskieren), aber sie können paarweise zur Zeichenkettenverkettung vorkommen.
Doppelte Anführungszeichen
Beispiel
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str
Die Ausgabe ist:
Hello, I know you are "example"!
Vorteile doppelter Anführungszeichen:
- Variablen können innerhalb doppelter Anführungszeichen verwendet werden
- Escape-Zeichen können in doppelten Anführungszeichen vorkommen
Strings verketten
Beispiel
# Verketten mit doppelten Anführungszeichen
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
# Verketten mit einfachen Anführungszeichen
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
Die Ausgabe ist:
hello, example ! hello, example !
hello, example ! hello, ${your_name} !
Ermitteln der Stringlänge
Beispiel
echo ${#string} # Gibt 4 aus
Wenn die Variable ein String ist,${#string}ist äquivalent zu${#string[0]}:
Beispiel
echo ${#string[0]} # Gibt 4 aus
Teilzeichenketten extrahieren
Das folgende Beispiel beginnt beim2Zeichen der Zeichenkette und extrahiert4Zeichen:
Beispiel
echo ${string:1:4} # Gibt unoo aus
Hinweis: Der Indexwert des ersten Zeichens ist0。
Teilzeichenketten finden
Finde die Position des Zeichensiodero(gezählt wird der Buchstabe, der zuerst vorkommt):
Beispiel
echo `expr index "$string" io` # Gibt 4 aus
Hinweis:Im obigen Skript ist`es ein Backtick, kein einfaches Anführungszeichen', verwechsle es nicht.
Shell-Arrays
bash unterstützt eindimensionale Arrays (unterstützt keine mehrdimensionalen Arrays) und begrenzt die Größe des Arrays nicht.
Ähnlich wie in der Sprache C werden die Indizes von Array-Elementen beginnend bei 0 nummeriert. Um auf ein Element in einem Array zuzugreifen, müssen Sie einen Index verwenden. Der Index kann eine Ganzzahl oder ein arithmetischer Ausdruck sein, und sein Wert sollte größer oder gleich 0 sein.
Arrays definieren
In der Shell werden Klammern verwendet, um Arrays darzustellen, und Array-Elemente werden durch das Symbol "Leerzeichen" getrennt. Die allgemeine Form zum Definieren eines Arrays lautet:
数组名=(值1 值2 ... 值n)
Zum Beispiel:
array_name=(value0 value1 value2 value3)
oder
array_name=( value0 value1 value2 value3 )
Sie können auch die einzelnen Komponenten eines Arrays separat definieren:
array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen
Es ist nicht notwendig, aufeinanderfolgende Indizes zu verwenden, und es gibt keine Einschränkung für den Bereich der Indizes.
Arrays lesen
Das allgemeine Format zum Lesen eines Array-Element-Werts ist:
${array name [subscript]}
Zum Beispiel:
valuen=${array_name[n]}
Verwenden Sie@; mit dem Symbol können alle Elemente im Array abgerufen werden, zum Beispiel:
echo ${array_name[@]}
Die Länge eines Arrays ermitteln
Die Methode zum Abrufen der Länge eines Arrays ist dieselbe wie zum Abrufen der Länge einer Zeichenkette, zum Beispiel:
Beispiel
length=${#array_name[@]}
# Oder
length=${#array_name[*]}
# Länge eines einzelnen Array-Elements abrufen
Länge=${#array_name[n]}
Shell-Kommentare
mit#Zeilen, die mit # beginnen, sind Kommentare und werden vom Interpreter ignoriert.
Durch das Hinzufügen eines##-Zeichens zu jeder Zeile, um mehrzeilige Kommentare zu setzen, wie hier:
Beispiel
# Dies ist ein Kommentar
# Autor: Beispiel
# Website:www.example.com
# Slogan: Was du lernst, ist nicht nur Technologie, sondern auch Träume!
#--------------------------------------------
##### Benutzerkonfigurationsbereich Anfang #####
#
#
# Skriptbeschreibungsinformationen hier hinzufügen
#
#
##### Benutzerkonfigurationsbereich Ende #####
Wenn Sie während der Entwicklung auf einen großen Codeblock stoßen, der vorübergehend auskommentiert und später wieder einkommentiert werden muss, was können Sie tun?
Das Hinzufügen eines #-Symbols zu jeder Zeile ist zu mühsam. Sie können den Codeblock, der kommentiert werden soll, in ein Paar geschweifte Klammern einschließen und als Funktion definieren. Wenn die Funktion nie aufgerufen wird, wird der Code nicht ausgeführt, was denselben Effekt wie das Kommentieren erzielt.
Mehrzeilige Kommentare
Verwendung von Here-Dokumenten
Mehrzeilige Kommentare können auch das folgende Format verwenden:
Kommentarinhalt...
Kommentarinhalt...
Kommentarinhalt...
EOF
Andere Symbole können ebenfalls anstelle von EOF verwendet werden:
Beispiel
Dies ist der auskommentierte Teil.
Er kann mehrere Zeilen enthalten.
COMMENT
:<<'
Kommentarinhalt...
Kommentarinhalt...
Kommentarinhalt...
'
:<<!
Kommentarinhalt...
Kommentarinhalt...
Kommentarinhalt...
!
Direkt das : Zeichen verwenden
Wir können auch den Doppelpunkt:Befehl verwenden und einfache Anführungszeichen'verwenden, um mehrere Zeilen Inhalt einzuschließen. Da der Doppelpunkt ein leerer Befehl ist, werden diese Inhalte nicht ausgeführt.
Das Format ist:: + Leerzeichen + einfaches Anführungszeichen。
Beispiel
Dies ist der auskommentierte Teil.
Er kann mehrere Zeilen enthalten.
'