THEMA about_Switch KURZBESCHREIBUNG Erklärt, wie eine switch-Anweisung zur Verarbeitung mehrerer if-Anweisungen verwendet wird. DETAILBESCHREIBUNG Entscheidungen in einem Skript oder Programm können mithilfe einer if- Anweisung getroffen werden. Diese Anweisung besagt: "Wenn diese Bedingung zutrifft, führe diese Aktion aus. Andernfalls führe jene Aktion aus." Sie können diesen Vorgang beliebig oft ausführen. Bei einer langen Liste von Bedingungen kann die Verwendung einer if-Anweisung jedoch unhandlich werden. In einer switch-Anweisung können mehrere Bedingungen miteinander kombiniert werden. Wie bei allen Verzweigungsanweisungen müssen Skriptblöcke in geschweifte Klammern ("{}") eingeschlossen werden. Eine Switch-Anweisung entspricht im Grunde einer Reihe von if-Anweisungen. Der Ausdruck wird nacheinander mit jeder der Bedingungen verglichen. Bei einer Übereinstimmung wird die mit dieser Bedingung verbundene Aktion ausgeführt. Eine grundlegende switch-Anweisung besitzt folgende Form: PS> $a = 3 PS> switch ($a) { 1 {"Ergebnis ist eins."} 2 {"Ergebnis ist zwei."} 3 {"Ergebnis ist drei."} 4 {"Ergebnis ist vier."} } Ergebnis ist drei. In diesem einfachen Beispiel wird ein Wert mit jeder Bedingung in der Liste verglichen. Anschließend wird in der Aktion die Zeichenfolge für die Übereinstimmung ausgegeben. Es kann jedoch problematisch sein, alle Bedingungen zu prüfen. Beispiel: PS> $tag = "tag5" PS> switch ($tag){ tag1 {"Montag"; break} tag2 {"Dienstag"; break} tag3 {"Mittwoch"; break} tag4 {"Donnerstag"; break} tag5 {"Freitag"; break} tag6 {"Samstag"; break} tag7 {"Sonntag"; break} tag5 {"Zu viele Tage"; break} } Freitag Die Liste enthält zwei Bedingungen für "tag5". Durch die break-Anweisung am Ende jeder Bedingung sucht die switch-Anweisung bei einer Übereinstimmung jedoch nicht weiter, sondern führt die zugehörige Aktion aus. Ohne die break-Anweisungen würden beide Aktionen für "tag5" ausgeführt werden. Wenn der in der switch-Anweisung ausgewertete Wert ein Array ist, wird jedes Element im Array der Reihenfolge nach ausgewertet, beginnend mit dem Element 0. Es muss mindestens ein Element vorhanden sein, das mindestens einer Bedingung entspricht, andernfalls wird ein Fehler ausgegeben. Wenn mehr als eine default-Klausel vorhanden ist, wird ebenfalls ein Fehler ausgegeben. Die vollständige Syntax der switch-Anweisung lautet wie folgt: switch [-regex|-wildcard|-exact][-casesensitive] ( pipeline ) oder switch [-regex|-wildcard|-exact][-casesensitive] -file Dateiname gefolgt von { "Zeichenfolge"|Zahl|Variable|{ Ausdruck } { Anweisungsliste } default { Anweisungsliste } } Wenn keine Parameter angegeben werden, verhält sich die Switch-Anweisung standardmäßig so, als ob eine genaue Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung gesucht wird. Wenn die Option "pipeline" ein Array ergibt, wird jedes Element des Arrays in aufsteigender Offsetreihenfolge (beginnend bei 0) ausgewertet. Der Switch-Codeblock muss mindestens ein bedingtes Element enthalten und darf nur eine default-Klausel enthalten. Wenn mehr als eine default-Klausel enthalten ist, wird eine "ParseException" ausgelöst. Für die Switch-Anweisung können folgende Parameter verwendet werden: Regex Gibt an, dass die Übereinstimmungsklause l, wenn es sich um eine Zeichenfolge handelt, als regulärer Ausdruck behandelt wird. Bei Verwendung dieses Parameters werden die Optionen "Wildcard" und "Exact" deaktiviert. Wenn die Übereinstimmungsklausel keine Zeichenfolge ist, wird dieser Parameter ignoriert. Wildcard Gibt an, dass die Übereinstimmungsklausel, wenn es sich um eine Zeichenfolge handelt, als Platzhalterzeichenfolge behandelt wird. Bei Verwendung dieses Parameters werden die Optionen "Regex" und "Exact" deaktiviert. Wenn die Übereinstimmungsklausel keine Zeichenfolge ist, wird dieser Parameter ignoriert. Exact Gibt an, dass die Übereinstimmungsklause l, wenn es sich um eine Zeichenfolge handelt, genau übereinstimmen muss. Bei Verwendung dieses Parameters werden die Optionen "Wildcard" und "Regex" deaktiviert. Wenn die Übereinstimmungsklausel keine Zeichenfolge ist, wird dieser Parameter ignoriert. CaseSensitive Wenn die Übereinstimmungsklausel eine Zeichenfolge ist, wird diese zur Berücksichtigung der Groß- und Kleinschreibung geändert. Wenn die Übereinstimmungsklausel keine Zeichenfolge ist, wird dieser Parameter ignoriert. File Gibt an, dass die Eingabe nicht aus einer Anweisung, sondern aus einer Datei (oder einem gleichwertigen Objekt) übernommen werden soll. Bei Angabe mehrerer File-Parameter wird der letzte Parameter verwendet. Jede Zeile der Datei wird gelesen und durchläuft den switch-Block. Die Optionen "Regex", "Wildcard" und "Exact" dürfen mehrfach verwendet werden. Allerdings richtet sich das Verhalten nach dem letzten Parameter. Das Schlüsselwort "Break" gibt an, dass keine weitere Verarbeitung erfolgt und dass die Switch-Anweisung beendet wird. Das Schlüsselwort "Continue" gibt an, dass die Verarbeitung für das aktuelle Token fortgesetzt und das nächste Token in den Bedingungen ausgewertet wird. Wenn keine Tokens verfügbar sind, wird die Switch-Anweisung beendet. Für den Block "{ Ausdruck }" kann ein Codeblock angegeben werden, der während des Vergleichs ausgewertet wird. Das aktuelle Objekt wird an die automatische Variable "$_" gebunden und ist während der Auswertung des Ausdrucks verfügbar. Ein Vergleich gilt als Übereinstimmung, wenn der Ausdruck "True" ergibt. Dieser Ausdruck wird in einem neuen Bereich ausgewertet. Das Schlüsselwort "Default" in der switch-Anweisung gibt an, dass der Codeblock nach diesem Schlüsselwort ausgeführt werden soll, wenn keine Übereinstimmungen gefunden werden. Ein Programmfluss von Block zu Block ist nicht zulässig, da die schließende Klammer ("}") in der Verbundliste einem expliziten "break" entspricht. Wenn mehrere Übereinstimmungen gefunden werden, wird für jede Übereinstimmung der zugehörige Ausdruck ausgeführt. Dies kann mit den Schlüsselwörtern "Break" und "Continue" verhindert werden, indem keine weiteren Vergleiche ausgeführt werden. SIEHE AUCH about_Break about_Continue about_If about_Script_Blocks