AUF DIESER SEITE
Übersicht über SLAX-Variablen
SLAX-Variablen können beliebige Werte speichern, die Sie berechnen oder statisch definieren können. Dazu gehören Datenstrukturen, XML-Hierarchien sowie Kombinationen aus Text und Parametern. Sie können z. B. die XML-Ausgabe eines Betriebsmodusbefehls einer Variablen zuweisen und dann auf die Hierarchie innerhalb der Variablen zugreifen.
Sie können sowohl lokale als auch globale Variablen definieren. Variablen sind global, wenn sie außerhalb einer Vorlage definiert werden. Ansonsten sind sie lokal. Auf den Wert einer globalen Variablen kann an einer beliebigen Stelle im Skript zugegriffen werden. Der Gültigkeitsbereich einer lokalen Variablen ist auf die Vorlage oder den Codeblock beschränkt, in dem sie definiert ist.
Version 1.0 der SLAX-Sprache unterstützt unveränderliche Variablen, die mit der var
Anweisung deklariert werden. Version 1.1 der SLAX-Sprache, die ab Junos OS Version 12.2 unterstützt wird, führt veränderbare Variablen ein, die mit der mvar
Anweisung deklariert werden. Veränderbare und unveränderliche Variablen werden in den folgenden Abschnitten erläutert:
Unveränderliche Variablen
In Version 1.0 der SLAX-Sprache deklarieren Sie Variablen mit der var
Anweisung. Variablen, die mit der var
Anweisung deklariert werden, sind unveränderlich. Sie können den Wert einer unveränderlichen Variablen nur festlegen, wenn Sie sie deklarieren, danach ist der Wert festgelegt.
In der Deklaration wird dem Variablennamen das Dollarzeichen ($) vorangestellt, im Gegensatz zur XSLT-Deklaration, bei der das Dollarzeichen dem Wert des name
Attributs des Elements <xsl:variable>
kein Präfix voranstellt. Nachdem Sie eine Variable deklariert haben, können Sie sie in einem XPath-Ausdruck referenzieren, indem Sie den Variablennamen mit einem vorangestellten Dollarzeichen ($) verwenden. Sie initialisieren eine Variable, indem Sie dem Variablennamen ein Gleichheitszeichen (=) und einen Ausdruck folgen.
Im folgenden Beispiel wird die Variable location
deklariert und initialisiert, die dann zum Initialisieren der Variablen message
verwendet wird:
var $location = $dot/@location; var $message = "We are in " _ $location _ " now.";
Das XSLT-Äquivalent lautet:
<xsl:variable name="location" select="$dot/@location"/> <xsl:variable name="message" select="concat('We are in ', $location, ' now.')"/>
Variablen, die mit der var
Anweisung deklariert werden, sind unveränderlich. Daher können Sie den Wert der Variablen niemals ändern, nachdem sie in der Deklaration initialisiert wurde. Obwohl Sie den Wert der Variablen nicht direkt aktualisieren können, können Sie den Effekt nachahmen, indem Sie eine Funktion rekursiv aufrufen und den Wert der Variablen als Parameter übergeben. Zum Beispiel:
var $count = 1; match / { call update-count($myparam = $count); } template update-count($myparam) { expr $count _ ", " $myparam _"\n"; if ($myparam != 4) { call update-count($myparam = $myparam + 1) } }
Das Ausführen des op-Skripts in der CLI erzeugt die folgende Ausgabe in der Protokolldatei. Obwohl die count
Variable fest bleiben muss, myparam
wird sie bei jedem Aufruf der Vorlage aktualisiert.
1, 1 1, 2 1, 3 1, 4 1, 5
Veränderbare Variablen
Version 1.1 der SLAX-Sprache, die in Junos OS Version 12.2 und höheren Versionen unterstützt wird, führt veränderbare Variablen ein. Im Gegensatz zu Variablen, die mit der Anweisung deklariert werden, kann der var
Wert einer veränderlichen Variablen durch ein Skript geändert werden. Sie können den Anfangswert einer veränderlichen Variablen zum Zeitpunkt der Deklaration oder an einem beliebigen Punkt im Skript festlegen.
Sie deklarieren veränderbare Variablen mit der mvar
Anweisung. In der Deklaration wird dem Variablennamen das Dollarzeichen ($) vorangestellt. Nachdem Sie eine veränderliche Variable deklariert haben, können Sie sie in einem XPath-Ausdruck referenzieren, indem Sie den Variablennamen mit einem vorangestellten Dollarzeichen ($) verwenden. Sie initialisieren die Variable, indem Sie dem Variablennamen ein Gleichheitszeichen (=) und einen Ausdruck folgen.
Im folgenden Beispiel wird die veränderliche Variable location
deklariert und initialisiert, die dann zum Initialisieren der veränderlichen Variablen message
verwendet wird:
mvar $location = $dot/@location; mvar $message = "We are in " _ $location _ " now.";
Veränderbare Variablen können initialisiert oder aktualisiert werden, nachdem sie deklariert wurden. Verwenden Sie die set
Anweisung, um den Wert einer veränderlichen Variablen zu initialisieren oder zu aktualisieren. Im folgenden Beispiel wird die Variable block
deklariert und mit dem Element <block>
initialisiert:
mvar $block; set $block = <block> "start here";
Verwenden Sie für veränderbare Variablen, die einen Knotensatz darstellen, die append
Anweisung, um einen neuen Knoten an den vorhandenen Knotensatz anzuhängen. Im folgenden Beispiel wird die veränderbare Variable $mylist
erstellt, die mit einem <item>
Element initialisiert wird. Für jeden Lebensmittelartikel in der Variablen hängt das Skript ein <item>
Element mit dem Namen und der $list
Größe des Artikels an den $mylist
Knotensatz an.
version 1.1; var $list := { <list> { <grocery> { <name> "milk"; <type> "nonfat"; <brand> "any"; <size> "gallon"; } <grocery> { <name> "orange juice"; <type> "no pulp"; <brand> "any"; <size> "half gallon"; } <drugstore>{ <name> "aspirin"; <brand> "any"; <size> "50 tablets"; } } } match / { mvar $mylist; set $mylist = <item> { <name> "coffee"; <size> "1 lb"; } for $item ($list/list/grocery) { append $mylist += <item> { <name> $item/name; <size> $item/size; } } <grocery-short-list> { copy-of $mylist; } }
Die Ausgabe des Skripts lautet:
<?xml version="1.0"?> <grocery-short-list> <item> <name>coffee</name> <size>1 lb</size> </item> <item> <name>milk</name> <size>gallon</size> </item> <item> <name>orange juice</name> <size>half gallon</size> </item> </grocery-short-list>