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:

your_name="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:

for file in `ls /etc`
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

your_name="qinjx"
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

for skill in Ada Coffe Action Java; do
    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

your_name="tom"
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

#!/bin/bash

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

#!/bin/sh

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

your_name="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

your_name="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

string="abcd"
echo ${#string}   # Gibt 4 aus

Wenn die Variable ein String ist,${#string}ist äquivalent zu${#string[0]}:

Beispiel

string="abcd"
echo ${#string[0]}   # Gibt 4 aus

Teilzeichenketten extrahieren

Das folgende Beispiel beginnt beim2Zeichen der Zeichenkette und extrahiert4Zeichen:

Beispiel

string="example is a great site"
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

string="example is a great site"
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

# Anzahl der Array-Elemente abrufen
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:

:<<EOF
Kommentarinhalt...
Kommentarinhalt...
Kommentarinhalt...
EOF

In the above example,:ein Nullbefehl, der verwendet wird, um das folgende Here-Dokument auszuführen,<<'EOF'gibt den Beginn eines Here-Dokuments an, COMMENT ist der Bezeichner des Here-Dokuments, und der Inhalt zwischen diesen beiden Bezeichnern wird als Kommentar behandelt und nicht ausgeführt.

Andere Symbole können ebenfalls anstelle von EOF verwendet werden:

Beispiel

: <<'COMMENT'
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.
'

Andere Erweiterungen