English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

ShellFlusskontrolle

ShellFlusskontrolle

Im Gegensatz zu Sprachen wie Java, PHP usw. dürfen die Kontrollflüsse in sh nicht leer sein, wie im folgenden PHP-Flusskontrollcode gezeigt:

<?php
if (isset($_GET["q"])) {
    search(q);
}
else {
    // Nichts tun
}

In sh/In bash darf man das so nicht schreiben, wenn die else-Branche keine Anweisungen ausführt, dann sollte dieser else nicht geschrieben werden.

if else

fi

if Anweisungssyntax:

if condition
then
    command1 
    command2
    ...
    commandN 
fi

in einer Zeile schreiben (eignet sich für den Terminalbefehlszeilen-Prompt):

if [$$(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi

Das Ende von fi ist das Gegenteil von if geschrieben, und ähnliche werden noch vorkommen.

if else

if else Syntaxformat:

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

if else-if else

if else-if else Syntaxformat:

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

Nachfolgender Beispielcode überprüft, ob zwei Variablen gleich sind:

a=10
b=20
if [$a == $b ]
then
   echo "a ist gleich b"
elif [$a -gt $b ]
then
   echo "a ist größer als b"
elif [$a -lt $b ]
then
   echo "a ist kleiner als b"
else
   echo "Keine passenden Bedingungen"
fi

Ausgaberesultat:

a ist kleiner als b

if else Anweisungen werden oft mit dem Befehl test kombiniert, wie folgt:

num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
    echo 'Zwei Zahlen sind gleich!'
else
    echo 'Zwei Zahlen sind nicht gleich!'
fi

Ausgaberesultat:

Zwei Zahlen sind gleich!

for-Schleifen

Wie andere Programmiersprachen auch, unterstützt Shell for-Schleifen.

Der allgemeine Format der for-Schleifen ist:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

In einer Zeile schreiben:

for var in item1 item2 ... itemN; do command1; command2... done;

Wenn der Wert der Variable in der Liste ist, führt der for-Schleifen alle Befehle einmal aus, indem der Variablenname den aktuellen Wert aus der Liste abruft. Der Befehl kann jeder gültige Shell-Befehl und Anweisung sein. Die Liste kann Ersetzungen, Strings und Dateinamen enthalten.

Die Liste ist optional, wenn sie nicht verwendet wird, verwendet der for-Schleifen die Positionierungsparameter der Befehlszeile.

Zum Beispiel, geben Sie die Nummern in der aktuellen Liste in der Reihenfolge aus:

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

Ausgaberesultat:

The value is: 1
The value is: 2
The value is: 3
The value is: 4
The value is: 5

Reihenfolge der Ausgabe der Zeichen im String:

#!/bin/bash
for str in This is a string
do
    echo $str
done

Ausgaberesultat:

This
is
a
string

while-Anweisung

While-Schleifen werden verwendet, um eine Reihe von Befehlen ständig auszuführen und auch um Daten aus Eingabedateien zu lesen. Das Syntax-Format ist:

while condition
do
    command
done

Hier ist ein einfaches while-Schleifenbeispiel, das Testbedingung ist: Wenn int kleiner oder gleich 5erhöht. 1 Anfang, während jeder Schleifenverarbeitung, wird int um 1. Führen Sie das obige Skript aus und geben Sie zurück: 1 bis 5dann wird beendet.

#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

Führen Sie das Skript aus und geben Sie aus:

1
2
3
4
5

Der obige Beispiel verwendet den Bash let Befehl, der zum Ausführen eines oder mehrerer Ausdrücke verwendet wird, bei Variablenberechnungen ist nicht erforderlich, $ zu verwenden, um Variablen zu zeigen, Näheres siehe:Bash let Befehl

.

While-Schleifen können zur Lesung von Tastaturinformationen verwendet werden. Im folgenden Beispiel wird die Eingabeinformation als Variable FILM festgelegt, drücken Sie <Ctrl-D> Beenden der Schleife.

echo 'Drücken Sie <CTRL-D> Beenden'
echo -n 'Geben Sie den Namen Ihrer Lieblingswebsite ein: '
while read FILM
do
    echo "Ja! $FILM ist eine gute Website"
done

Führen Sie das Skript aus und geben Sie ähnlich folgendes aus:

Drücken Sie <CTRL-D> Beenden
Geben Sie den Namen Ihrer Lieblingswebsite ein: Basistutorial-Website
Ja! Basistutorial-Website ist eine gute Website

Unendliche Schleife

Unendliche Schleifen Syntax Format:

while :
do
    command
done

oder

while true
do
    command
done

oder

for \

until-Loop

Der until-Loop führt eine Reihe von Befehlen aus, bis die Bedingung true wird.

Der until-Loop ist im Gegensatz zum while-Loop im Umgang.

Im Allgemeinen ist der while-Loop besser als der until-Loop, aber in einigen Fällen - nur in sehr seltenen Fällen - ist der until-Loop nützlicher.

Die Syntax ist wie folgt:

bis [ \
do
    command
done

Die Bedingung ist in der Regel eine bedingte Ausdrucksformel. Wenn der Rückgabewert false ist, wird der Befehl im Loop fortgesetzt, andernfalls wird der Loop verlassen.

Im folgenden Beispiel verwenden wir den Befehl until, um 0 ~ 9 Anzahl der Zahlen:

#!/bin/bash
a=0
bis [ \ -lt 10 ]
do
   echo \
   a=`expr \ + 1`
done

Ergebnis der Ausführung:

Das Ausgaberesultat ist:

0
1
2
3
4
5
6
7
8
9

case ... esac

case ... esac Es ist ein mehrfach bedingtes Statement, ähnlich wie das switch ... case Statement in anderen Sprachen, eine mehrfache Zweigstruktur der Auswahl, jeder Zweig beginnt mit einem rechten eckigen Klammern, und wird mit zwei Semikolons ;; beendet, was bedeutet, dass der Befehl beendet ist und man aus dem gesamten case ... esac Statement aussteigt. esac (das ist das Gegenteil von case) ist das Endzeichen.

Man kann mit dem case-Ausdruck einen Wert mit einem Muster abgleichen, und wenn eine Übereinstimmung erfolgreich ist, wird der entsprechende Befehl ausgeführt.

case ... esac Die Syntax ist wie folgt:

case \
Muster1)
    command1
    command2
    ...
    commandN
    ;;
Muster2)
    command1
    command2
    ...
    commandN
    ;;
esac

case-Verhalten wie oben gezeigt, der Wert muss unbedingt ein Wort inverwendet, und jedes Muster muss mit einem rechten Klammern enden. Der Wert kann eine Variable oder eine Konstante sein, und wenn ein passender Wert gefunden wird, beginnen alle Befehle zwischen dem Wert und ;; zu ausgeführt werden.

Der Wert wird jede passende Regel überprüfen. Sobald eine Regel passt, wird der entsprechende Befehl ausgeführt und die andere Regel wird nicht fortgesetzt. Wenn keine passende Regel gefunden wird, wird das Sternchen * Diesen Wert zu erfassen und dann den folgenden Befehl auszuführen.

Das folgende Skript fordert eine Eingabe an: 1 bis 4,mit jedem Muster abzugleichen:

echo 'Eingabe' 1 bis 4 Zwischen den Zahlen:'
echo 'Du hast die folgende Zahl eingegeben:'
read aNum
case $aNum in
    1) echo 'Du hast ausgewählt' 1'
    ;;
    2) echo 'Du hast ausgewählt' 2'
    ;;
    3) echo 'Du hast ausgewählt' 3'
    ;;
    4) echo 'Du hast ausgewählt' 4'
    ;;
    *) echo 'Du hast nichts eingegeben' 1 bis 4 Zwischen den Zahlen'
    ;;
esac

Verschiedene Inhalte führen zu verschiedenen Ergebnissen, zum Beispiel:

Eingabe 1 bis 4 zwischen den Zahlen:
Du hast die folgende Zahl eingegeben:
3
Du hast ausgewählt: 3

Die folgenden Skript matcht Zeichenfolgen:

#!/bin/sh
site=\3codebox\
case \
   "w3codebox") echo "基础教程网" 
   ;;
   "google") echo "Google 搜索" 
   ;;
   "taobao") echo "淘宝网" 
   ;;
esac

Das Ausgaberesultat ist:

Grundtutorialsite

Aus dem Zyklus aussteigen

Während des Zyklus kann es notwendig sein, aus dem Zyklus auszusteigen, bevor die Zyklusbedingung erreicht ist. Shell verwendet zwei Befehle, um diese Funktion zu realisieren: break und continue.

breakBefehl

Der breakBefehl ermöglicht das Aussteigen aus allen Zyklen (beendet die Ausführung der folgenden Zyklen).

Im folgenden Beispiel führt das Skript in einen Endlosschleifen bis der Benutzer eine Zahl eingibt, die größer als5. Um aus diesem Zyklus auszusteigen und zum Shell- Prompt zurückzukehren, ist der breakBefehl erforderlich.

#!/bin/bash
while :
do
    echo -n "Eingabe 1 bis 5 zwischen den Zahlen":
    read aNum
    case $aNum in
        1|2|3|4|5) echo "Die von Ihnen eingegebene Zahl beträgt $aNum!"
        ;;
        *) echo "Die von Ihnen eingegebene Zahl ist nicht 1 bis 5 zwischen "! Spiel beendet"
            break
        ;;
    esac
done

Führen Sie den obigen Code aus, das Ausgaberesultat ist:

Eingabe 1 bis 5 zwischen den Zahlen:3
Die von Ihnen eingegebene Zahl beträgt 3!
Eingabe 1 bis 5 zwischen den Zahlen:7
Die von Ihnen eingegebene Zahl ist nicht 1 bis 5 zwischen "! Spiel beendet"

continue

Der continueBefehl ist ähnlich wie der breakBefehl, nur mit einem Unterschied: Er springt nicht aus allen Zyklen aus, sondern nur aus dem aktuellen Zyklus.

Veränderung des obigen Beispiels:

#!/bin/bash
while :
do
    echo -n "Eingabe 1 bis 5 zwischen den Zahlen: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "Die von Ihnen eingegebene Zahl beträgt $aNum!"
        ;;
        *) echo "Die von Ihnen eingegebene Zahl ist nicht 1 bis 5 zwischen "!"
            continue
            echo "Spiel beendet"
        ;;
    esac
done

Bei der Ausführung des Codes festgestellt, dass bei der Eingabe größer als5Wenn die Zahl, der Beispielzyklus endet nicht, der Anweisungecho "Spiel beendet"Wird niemals ausgeführt.