wsadmin-Scripting mit Jacl verwenden (veraltet)
Jacl ist eine alternative Implementierung von TCL und ist vollständig in Java™-Code geschrieben.
Das Tool wsadmin verwendet Jacl Version 1.3.2.
Stabilisierung der Jacl-Syntax im Tool "wsadmin"
Die Sprache Jacl wurde in Version 7 des Produkts stabilisiert. IBM® plant derzeit nicht, diese Funktionalität in nachfolgenden Releases des Produkts als veraltet zu erklären oder zu entfernen. Der Schwerpunkt bei künftigen Investitionen liegt jedoch auf der Sprache Jython, die die strategische Alternative ist. Sie müssen Ihre vorhandenen Anwendungen und Scripts, die Jacl verwenden, nicht ändern, aber Sie sollten die Verwendung der strategischen Alternative für neue Anwendungen in Erwägung ziehen.
- Unterstützung für Befehle in der Administrationskonsole - Ein Feature der Administrationskonsole, das den wsadmin-Befehl anzeigt, der der Aktion des Benutzers, der mit der Konsole interagiert, entspricht. Die Ausgabe des Unterstützungsfeatures des Konsolbefehls kann direkt an das WebSphere Application Server-Tool übertragen werden, wodurch die Entwicklung von Jython-Scripts, die auf Aktionen der Administrationskonsole basieren, vereinfacht wird. Sie können die Ausgabe, nachdem Sie das Unterstützungsfeature des Konsolbefehls verwendet haben, auch in einer unverschlüsselten Textdatei speichern, um sie zu einem späteren Zeitpunkt zu verwenden.
- Jacl-Jython-Konvertierungsdienstprogramm - Ein Programm, das wsadmin-Scripts mit Jacl-Syntax in äquivalente wsadmin-Scripts mit Jython-Syntax konvertiert. Es enthält Dutzende neuer problemorientierter Befehle, die das Script durch die Verwendung einfacher Parameter und intelligenter Zuordnung von Standardwerten vom zugrunde liegenden Verwaltungsmodell loslösen.
Basissyntax
Basissyntax für einen Jacl-Befehl:
Befehl Argument1 Argument2 Argument3 ...
Der Befehl selbst ist entweder der Name eines integrierten Befehls oder einer Jacl-Prozedur. Beispiel:
puts stdout {Hello, world!}
=> Hello, world!
Der Befehl in diesem Beispiel lautet puts und wird mit zwei Argumenten verwendet, einer E/A-Datenstromkennung und einer Zeichenfolge. Der Befehl puts schreibt die Zeichenfolge mit einem abschließenden Zeilenvorschubzeichen in den E/A-Datenstrom. Die Argumente werden vom Befehl interpretiert. In dem Beispiel bezeichnet stdout den Standardausgabedatenstrom. Die Verwendung von stdout als Namen gilt für den Befehl puts und die übrigen E/A-Befehle als Konvention. stderr bezeichnet die Standardfehlerausgabe und stdin die Standardeingabe.
Variablen
Der Befehl set ordnet einer Variablen einen Wert zu. Dieser Befehl wird mit zwei Argumenten verwendet, dem Namen der Variablen und dem Wert. Variablennamen können beliebig lang sein. Bei ihrer Angabe muss die Groß-/Kleinschreibung beachtet werden. Jacl-Variablen müssen vor ihrer Verwendung nicht deklariert werden. Der Interpreter erstellt die Variable, wenn ihr erstmalig ein Wert zugeordnet wird. Beispiel:
set a 5
=> 5
set b $a
=> 5
Das zweite Beispiel ordnet der Variablen b den Wert der Variablen a zu. Die Verwendung des Dollarzeichens ($) zeigt eine Variablensubstitution an. Mit dem Befehl unset können Sie eine Variable löschen. Beispiel:
unset Variablenname1 Variablenname2 ...
An den Befehl unset können Sie eine beliebige Anzahl von Variablen übergeben. Falls eine Variable noch nicht definiert ist, meldet der Befehl unset einen Fehler. Mit dem Befehl unset können Sie ein ganzes Array oder ein einzelnes Array-Element löschen. Die Verwendung des Befehls unset für ein Array ist der einfachste Weg, eine große Datenstruktur zu löschen. Mit dem Befehl info exists können Sie überprüfen, ob eine Variable vorhanden ist. Eine solche Überprüfung kann notwendig sein, da der Parameter incr erfordert, dass eine Variable bereits vorhanden ist. Beispiel:
if ![info exists meine_Info] {set meine_Info 0} else {incr meine_Info}
Befehlssubstitution
Die zweite Form der Substitution ist die Befehlssubstitution. Ein verschachtelter Befehl wird durch eckige Klammern [ ] begrenzt. Der Jacl-Interpreter bewertet alle Angaben zwischen den eckigen Klammern als Befehl. Beispiel:
set len [string length meine_Zeichenfolge]
=> 6
In diesem Beispiel lautet der verschachtelte Befehl string length meine_Zeichenfolge. Der Befehl string führt verschiedene Operationen für Zeichenfolgen aus. In diesem Fall fordert der Befehl die Länge der Zeichenfolge meine_Zeichenfolge an. Falls es innerhalb eines Befehl mehrere Befehlssubstitutionen gibt, verarbeitet der Interpreter diese von der linken eckigen Klammer zur rechten eckigen Klammer. Beispiel:
set number "1 2 3 4"
=> 1 2 3 4
set one [lindex $number 0]
=> 1
set end [lindex $number end]
=> 4
set another {123 456 789}
=> 123 456 789
set stringLen [string length [lindex $another 1]]
=> 3
set listLen [llength [lindex $another 1]
=> 1
Mathematische Ausdrücke
Der Jacl-Interpreter wertet keine mathematischen Ausdrücke aus. Verwenden Sie für die Auswertung mathematischer Ausdrücke den Befehl expr. Die Implementierung des Befehls expr verwendet alle Argumente, verknüpft sie zu einer Zeichenfolge und analysiert diese als einen mathematischen Ausdruck. Die vom Befehl expr berechnete Antwort wird als Zeichenfolge formatiert und zurückgegeben. Beispiel:
expr 7.2 / 3
=> 2.4
Backslash-Substitution
Die vom Jacl-Interpreter abschließend ausgeführte Substitution ist die Backslash-Substitution. Verwenden Sie Backslashs, um Zeichen mit spezieller Bedeutung für den Interpreter in Anführungszeichen zu setzen. Sie können beispielsweise ein Dollarzeichen oder eine geschweifte bzw. eckige Klammer als Literal angeben, indem Sie das Dollarzeichen oder die Klammer mit einem Backslash in Anführungszeichen setzen. Falls Sie viele Backslashs verwenden, können Sie die Zeichen stattdessen in geschweifte Klammern einschließen und so die gesamte Interpretation von Sonderzeichen inaktivieren. Es gibt Fälle, in denen Backslashs erforderlich sind. Beispiel:
set dollar "This is a string \$contain dollar char"
=> This is a string $contain dollar char
set x $dollar
=> This is a string $contain dollar char
set group {$ {} [] { [ } ]}
=> $ {} [] { [ } ]
Mit Backslashs können Sie auch lange Befehle in mehreren Zeilen fortsetzen. Eine neue Zeile ohne den Backslash beendet einen Befehl. Ein Backslash, der das letzte Zeichen einer Zeile ist, wird in ein Leerzeichen konvertiert. Beispiel:
set totalLength [expr [string length "first string"] + \
[string length "second string"]]
=> 25
Gruppierung mit geschweiften Klammern und Anführungszeichen
Mit Anführungszeichen und geschweiften Klammern können Sie Wörter zu einer Gruppe zusammenfassen. Bei der Verwendung von Anführungszeichen sind Substitutionen in der Gruppe zulässig, bei der Verwendung von geschweiften Klammern jedoch nicht. Diese Regel gilt für Befehls-, Variablen- und Backslashsubstitutionen. Beispiel:
set s Hello
=> Hello
puts stdout "The length of $s is [string length $s]."
=> The length of Hello is 5.
puts stdout {The length of $s is [string length $s].}
=> The length of $s is [string length $s].
Im zweiten Beispiel führt der Jacl-Interpreter eine Variablen- und Befehlssubstitution für das zweite Argument des Befehls puts aus. Beim dritten Befehl werden Substitutionen verhindert. Die Zeichenfolge wird demzufolge unverändert ausgegeben.
Bei Pfadbeschreibungen ist besondere Sorgfalt erforderlich, da die Sprache Jacl den Backslash (\) als
Escape-Zeichen verwendet. Ersetzen Sie daher jeden Backslash durch einen Schrägstrich, oder verwenden Sie
für verteilte Pfadanweisungen doppelte Backslashs.
Beispiel: C:/ oder C:\\
Prozeduren und Geltungsbereich
Jacl definiert Prozeduren mit dem Befehl proc. Basissyntax für das Definieren einer Prozedur:
proc Name Argumentliste Hauptteil
Das erste Argument ist der Name der zu definierenden Prozedur. Der Name kann aus beliebigen Zeichen bestehen. Die Groß-/Kleinschreibung wird unterschieden. Prozedurnamen und Variablennamen geraten nicht miteinander in Konflikt. Das zweite Argument ist eine Liste von Parametern für die Prozeduren. Das dritte Argument ist ein Befehl oder in den meisten Fällen eine Gruppe von Befehlen, die den Hauptteil der Prozedur darstellt. Eine definierte Jacl-Prozedur wird wie ein integrierter Befehl behandelt. Beispiel:
proc divide {x y} {
set result [expr $x/$y]
puts $result
}
Im Script wird die Prozedur "divide" wie folgt aufgerufen:
divide 20 5
Es wird ein Ergebnis ähnlich dem Folgenden zurückgegeben:
4
Die Variable c muss in diesem Beispiel nicht zwingend verwendet werden. Der Prozedurhauptteil könnte auch wie folgt geschrieben werden:
return [expr sqrt($a * $a + $b * $b)]
Der Befehl return in diesem Beispiel ist optional, da der Jacl-Interpreter den Wert des letzten Befehls im Hauptteil als den Wert der Prozedur zurückgibt. Der Prozedurhauptteil könnte daher wie folgt reduziert werden:
expr sqrt($a * $a + $b * $b)
Das Ergebnis der Prozedur ist das vom letzten Befehl im Hauptteil zurückgegebene Ergebnis. Der Befehl return kann verwendet werden, um einen bestimmten Wert zurückzugeben.
Für Prozedurnamen gibt es einen globalen Geltungsbereich. Auch wenn Sie eine Prozedur innerhalb einer anderen Prozedur definieren, ist diese Prozedur überall sichtbar. Für Variablen und Prozeduren gibt es verschiedene Namespaces, sodass ein identischer Name für eine Prozedur und eine Variable nicht zu einem Konflikt führt. Jede Prozedur hat einen lokalen Bereich für Variablen. Variablen für Prozeduren existieren nur für die Dauer des Prozeduraufrufs. Nach der Rückkehr der Prozedur sind diese Variablen nicht definiert. Falls es in einem äußeren Bereich einen identischen Variablennamen gibt, hat dies keine Auswirkungen auf die Verwendung des Variablennamens innerhalb einer Prozedur. Außerhalb der Prozedur definierte Variablen sind für eine Prozedur nicht sichtbar, solange die Befehle des globalen Geltungsbereichs verwendet werden.
Der globale Geltungsbereich ist der übergeordnete Geltungsbereich. Dieser Geltungsbereich liegt außerhalb aller Prozeduren. Variablen, die im globalen Geltungsbereich definiert sind, müssen für die Befehle innerhalb einer Prozedur mit dem Befehl global verfügbar gemacht werden. Syntax für den Befehl global:
global varName1 varName2 ...
Kommentare
Verwenden Sie für Kommentare das Nummernzeichen (#).
Befehlszeilenargumente
Die Jacl-Shells übergeben die Befehlszeilenargumente als Wert der Variablen argv an das Script. Die Anzahl der Befehlszeilenargumente wird durch die Variable argc angegeben. Der Name des Programms oder Scripts ist nicht Bestandteil von argv und wird nicht von argc mitgezählt. Die Variable argv ist eine Liste. Verwenden Sie den Befehl lindex, um Einträge aus der Argumentliste zu extrahieren. Beispiel:
set first [lindex $argv 0]
set second [lindex $argv 1]
Abgleich von Zeichenfolgen und Mustern
Zeichenfolgen sind in der Sprache Jacl das Basisdatenelement. Für die Bearbeitung von Zeichenfolgen können mehrere Befehle verwendet werden. Allgemeine Syntax des Befehls string:
string operation Zeichenfolgewert weitereArgumente
Das Argument operation legt die Aktion der Zeichenfolge fest. Das zweite Argument ist ein Zeichenfolgewert. Je nach Operation kann es zusätzliche Argumente geben.
Die folgende Tabelle enthält eine Zusammenfassung zum Befehl string:
Befehl | Beschreibung |
---|---|
string compare str1 str2 | Vergleicht Zeichenfolgen lexikografisch. Bei identischen Zeichenfolgen wird 0 zurückgegeben. Liegt str1 in der Reihenfolge vor str2, wird -1 zurückgegeben, andernfalls 1. |
string first str1 str2 | Gibt den Index des Zeichens in str2 zurück, an dem str1 das erste Mal vorkommt, oder -1, wenn str1 nicht gefunden wird. |
string index string1 index1 | Gibt das Zeichen an der Position des angegebenen Index zurück |
string last str1 str2 | Gibt den Index des Zeichens in str2 zurück, an dem str1 das letzte Mal vorkommt, oder -1, wenn str1 nicht gefunden wird. |
string length string | Gibt die Anzahl der Zeichen in der Zeichenfolge zurück. |
string match pattern str | Gibt 1 zurück, wenn str mit dem Muster übereinstimmt. Andernfalls wird 0 zurückgegeben. |
string range str i j | Gibt den Bereich der Zeichen von i bis j in str zurück |
string tolower string | Gibt die Zeichenfolge in Kleinschreibung zurück. |
string toupper string | Gibt die Zeichenfolge in Großschreibung zurück. |
string trim string ?chars? | Entfernt die Zeichen aus chars an beiden Enden der Zeichenfolge. Standardmäßig ist chars ein Leerraum. |
string trimleft string ?chars? | Entfernt alle Zeichen aus chars am Anfang der Zeichenfolge. Standardmäßig ist chars ein Leerraum. |
string trimright string ?chars? | Entfernt alle Zeichen aus chars am Ende der Zeichenfolge. Standardmäßig ist chars ein Leerraum. |
string wordend str ix | Gibt den Index des Zeichens in str nach dem Wort zurück, das das Zeichen an der Position von Index ix enthält |
string wordstart str ix | Gibt den Index des ersten Zeichens in str in dem Wort zurück, das das Zeichen an der Position von Index ix enthält |
Befehl "append"
Das erste Argument des Befehls append ist ein Variablenname. Die übrigen Argumente werden mit dem aktuellen Wert der benannten Variablen verknüpft. Beispiel:
set mein_Element z
=> z
append mein_Element a b c
=> zabc
Befehl "regexp"
Der Befehl regexp ermöglicht den direkten Zugriff auf den Vergleich regulärer Ausdrücke. Syntax:
regexp ?flags? pattern string ?match sub1 sub2 ...?
Der Rückgabewert ist 1, sofern ein Teil der Zeichenfolge mit dem Muster übereinstimmt. Andernfalls wird 0 zurückgegeben. Das Muster muss nicht mit der gesamten Zeichenfolge übereinstimmen. Für eine erweiterte Steuerung können Sie das Muster am Anfang der Zeichenfolge verankern, indem Sie das Muster mit ^ beginnen, oder am Ende der Zeichenfolge, indem Sie das Muster mit einem Dollarzeichen ($) beenden. Durch Verwendung beider Zeichen erzwingen Sie, dass das Muster mit der gesamten Zeichenfolge übereinstimmen muss. Beispiel:
set text1 "This is the first string"
=> This is the first string
regexp "first string" $text1
=> 1
regexp "second string" $text1
=> 0
Jacl-Datenstrukturen
Die Basisdatenstruktur in der Sprache Jacl ist eine Zeichenfolge. Es gibt zwei übergeordnete Datenstrukturen: Listen und Arrays. Listen werden als Zeichenfolgen implementiert. Die Struktur wird durch die Syntax der Zeichenfolge bestimmt. Die Syntaxregeln entsprechen denen von Befehlen. Befehle sind Sonderfälle von Listen. Arrays sind Variablen mit einem Index. Der Index ist ein Zeichenfolgewert. Arrays können wir uns somit als Zuordnung einer Zeichenfolge (Index) zu einer anderen (Wert des Array-Elements) vorstellen.
Jacl-Listen
Listen sind in der Sprache Jacl Zeichenfolgen mit spezieller Interpretation. In der Sprache Jacl hat eine Liste dieselbe Struktur wie ein Befehl. Eine Liste ist eine Zeichenfolge mit Listeneinträgen, die durch Leerzeichen voneinander getrennt sind. Wörter mit Leerzeichen können Sie durch geschweifte Klammern oder Anführungszeichen zu einem Listeneintrag gruppieren.
Die folgende Tabelle enthält Befehle, die für Listen verwendet werden:
Befehl | Beschreibung |
---|---|
list arg1 arg2 | Erstellt eine Liste aus allen Argumenten |
lindex list i | Gibt den i-ten Eintrag aus der Liste zurück |
llength list | Gibt die Anzahl der Einträge in der Liste zurück |
lrange list i j | Gibt den i-ten bis j-ten Eintrag aus der Liste zurück |
lappend listVar arg arg ... | Hängt Einträge an den Wert von listVar an |
linsert list index arg arg ... | Fügt Einträge zur Liste vor dem Eintrag an der Indexposition hinzu. Gibt eine neue Liste zurück. |
lreplace list i j arg arg ... | Ersetzt die Listeneinträge i bis j durch die Argumente. Gibt eine neue Liste zurück. |
lsearch mode list value | Gibt den Index des Eintrags in list zurück, der gemäß Modus mit dem Wert übereinstimmt. Der Modus kann -exact, -glob oder -regexp sein. Der Standardmodus ist -glob. Gibt -1 zurück, wenn der Index nicht gefunden wird. |
lsort switches list | Sortiert die Einträge der Liste gemäß den folgenden Schaltern: -ascii, -integer, -real, -increasing, -decreasing, -command Befehl. Gibt eine neue Liste zurück. |
concat arg arg arg ... | Verknüpft mehrere Listen zu einer Liste |
join list joinString | Fasst die Einträge einer Liste zusammen und trennt sie durch joinString |
split string splitChars | Unterteilt eine Zeichenfolge in Listenelemente, die durch die Zeichen in splitChars begrenzt werden |
Bereiche
set arr(index) value
Ersetzen Sie das Dollarzeichen ($), um den Wert eines Array-Elements zu erhalten. Beispiel:
set mein_Element $arr(index)
Beispiel:
set fruit(best) kiwi
=> kiwi
set fruit(worst) peach
=> peach
set fruit(ok) banana
=> banana
array get fruit
=> ok banana worst peach best kiwi
array exists fruit
=> 1
Die folgende Tabelle enthält Array-Befehle:
Befehl | Beschreibung |
---|---|
array exists arr | Gibt 1 zurück, wenn arr eine Array-Variable ist |
array get arr | Gibt eine Liste zurück, die in einen Index und den entsprechenden Array-Wert aufgeteilt ist |
array names arr ?pattern? | Gibt die Liste aller Indizes zurück die für arr definiert sind oder die mit dem Muster für den Zeichenfolgeabgleich übereinstimmen |
array set arr list | Initialisiert das Array arr aus der Liste list, die dasselbe Format wie die von get zurückgegebene Liste haben muss. |
array size arr | Gibt die Anzahl der für arr definierten Indizes zurück. |
array startsearch arr | Gibt ein Suchtoken für das Durchsuchen von arr zurück. |
array nextelement arr id | Gibt für die durch die Token-ID angegebene Suche den Wert des nächsten Elements im Array an. Falls keine Elemente mehr zu durchsuchen sind, wird eine leere Zeichenfolge zurückgegeben. |
array anymore arr id | Falls weitere Elemente zu durchsuchen sind, wird 1 zurückgegeben. |
array donesearch arr id | Beendet die durch id bezeichnete Suche. |
Befehle für Steuerungsfluss
Es gibt die folgenden Schleifenbefehle:
- while
- foreach
- for
Folgende Befehle sind bedingte Befehle:
- if
- switch
Der folgende Befehl dient der Fehlerbehandlung:
- catch
Mit den folgenden Befehlen wird der Steuerungsfluss optimiert:
- break
- continue
- return
- error
Befehl "if then else"
Der Befehl if ist der wichtigste Bedingungsbefehl. Er gibt an, dass bei einem gültigen Ausdruck (true) die zweite Codezeile und andernfalls eine andere Codezeile ausgeführt werden soll. Der zweite Hauptteil des Befehls (die Klausel else) ist optional. Syntax des Befehls:
if boolean then haupttteil1 else hauptteil2
Die Schlüsselwörter then und else sind optional. Beispiel:
if {$x == 0} {
puts stderr "Divide by zero!"
} else {
set slope [expr $y/$x]
}
Befehl "switch"
Mit dem Befehl switch können Sie Befehle abhängig vom Wert eines Ausdrucks verzweigen. Zur Auswahl stehen der Musterabgleich und einfache Vergleiche. Sie können eine beliebige Anzahl von Muster-Hauptteil-Paaren angeben. Stimmen mehrere Muster mit dem Wert überein, wird nur der Hauptteil des Codes für das erste übereinstimmende Muster ausgewertet. Allgemeines Format des Befehls:
switch flags value pat1 body1 pat2 body2 ...
Sie können auch alle Muster-Hauptteil-Paare zu einem Argument zusammenfassen:
switch flags value {pat1 body1 pat2 body2 ...}
Der Abgleich mit dem Wert kann durch vier Attribute bestimmt werden:
- -exact Eines der Muster stimmt exakt mit dem Wert überein.
- -glob Es wird der globale Musterabgleich angewendet.
- -regexp Es wird der Abgleich regulärer Ausdrücke angewendet.
- -- Kein Attribut (oder Ende der Attribute). Diese Angabe ist sinnvoll, wenn der Wert mit einem Bindestrich (-) beginnen kann.
Beispiel:
switch -exact -- $value {
foo {doFoo; incr count(foo)}
bar {doBar; return $count(foo)}
default {incr count(other)}
}
Falls das dem letzten Hauptteil zugeordnete Muster default lautet und kein weiteres Muster übereinstimmt, wird der Hauptteil des Befehls gestartet. Das Schlüsselwort default kann nur auf das letzte Muster-Hauptteil-Paar angewendet werden. Falls Sie das Muster "default" für einen früheren Hauptteil verwenden, wird es wie ein Muster mit der Literalzeichenfolge "default" verwendet und entsprechend abgeglichen.
Befehl "foreach"
Der Befehl foreach führt eine Schleife für einen Hauptteil des Befehls aus und ordnet jedem Wert in einer Liste eine Schleifenvariable zu. Syntax:
foreach Schleifenvariable Werteliste Befehlshauptteil
Das erste Argument ist der Name einer Variablen. Der Hauptteil des Befehls wird für jedes Element in der Schleife einmal ausgeführt, wobei die Schleifenvariable aufeinanderfolgende Listenwerte enthält. Beispiel:
set numbers {1 3 5 7 11 13}
foreach num $numbers {
puts $num
}
Unter der Bedingung, dass es in der Umgebung nur einen Server gibt, sieht die Ausgabe des obigen Beispiels wie folgt aus. Falls mehrere Server vorhanden sind, werden die Informationen für alle Server zurückgegeben.
1
3 5
7
11
13
while
Der Befehl while wird mit zwei Argumenten verwendet: einem Test und einem Befehlshauptteil. Beispiel:
while booleanExpr body
Der Befehl while testet den booleschen Ausdruck wiederholt und führt den Hauptteil aus, falls der Ausdruck wahr (ungleich null) ist. Beispiel:
set i 0
while {$i < 5} {
puts "i is $i"
incr i}
Unter der Bedingung, dass es nur einen Server gibt, sieht die Ausgabe des obigen Beispiels wie folgt aus. Falls mehrere Server vorhanden sind, werden alle Server ausgegeben:
i is 0
i is 1
i is 2
i is 3
i is 4
for
Der Befehl for ist mit der C-Anweisung "for" vergleichbar. Er wird mit vier Argumenten verwendet. Beispiel:
for initial test final body
Das erste Argument ist ein Befehl zum Initialisieren der Schleife. Das zweite Argument ist ein boolescher Ausdruck, der bestimmt, ob der Schleifenhauptteil ausgeführt wird. Das dritte Argument ist ein Befehl, der nach dem Schleifenhauptteil ausgeführt wird. Beispiel:
set numbers {1 3 5 7 11 13}
for {set i 0} {$i < [llength $numbers]} {incr i 1} {
puts "i is $i"
}
Unter der Bedingung, dass es in der Umgebung nur einen Server gibt, sieht die Ausgabe des obigen Beispiels wie folgt aus. Falls mehrere Server vorhanden sind, werden alle Servernamen ausgegeben:
i is 1
i is 3
i is 5
i is 7
i is 11
i is 13
Befehle "break" und "continue"
Mit den Befehlen break und continue können Sie die Ausführung der Schleife steuern. Der Befehl break bewirkt den sofortigen Austritt aus einer Schleife. Der Befehl continue bewirkt, dass die Schleife mit der nächsten Iteration fortgesetzt wird.
Befehl "catch"
Falls Sie einen Befehl mit einer falschen Anzahl von Argumenten ausführen oder der Befehl eine Fehlerbedingung (insbesondere bezüglich seiner Implementierung) feststellt, tritt ein Fehler auf. Ein nicht abgefangener Fehler verhindert die Ausführung eines Scripts. Verwenden Sie den Befehl catch, um solche Fehler abzufangen. Der Befehl catch wird mit zwei Argumenten verwendet. Beispiel:
catch command ?resultVar?
Das erste Argument ist ein Befehlshauptteil. Das zweite Argument ist der Name einer Variablen, die das Ergebnis des Befehls oder, falls der Befehl einen Fehler auslöst, eine Fehlernachricht enthält. Der Befehl catch gibt den Wert null zurück, wenn kein Fehler abgefangen wurde, oder den Wert eins, falls der Befehl einen Fehler abfängt. Beispiel:
catch {expr 20 / 5} result
==> 0
puts $result
==> 4
catch {expr text / 5} result
==> 1
puts $result
==> syntax error in expression "text / 5"
Befehl "return"
Verwenden Sie den Befehl return für die Rückgabe eines Wertes vor dem Ende des Prozedurhauptteils oder für die Rückgabe eines Kontrastwertes.
Namespaces
Jacl überwacht benannte Entitäten, z. B. Variablen, in Namespaces. Das Tool wsadmin fügt ebenfalls Einträge zum globalen Namespace für Scripting-Objekte, z. B. das Objekt AdminApp, hinzu.
Wenn Sie einen proc-Befehl ausführen, wird ein lokaler Namespace erstellt und mit den Namen und Werten der Parameter im proc-Befehl initialisiert. Während der Ausführung des proc-Befehls befinden sich die Variablen im lokalen Namespace. Wenn Sie den proc-Befehl stoppen, wird der lokale Namespace gelöscht. Der lokale Namespace des proc-Befehls implementiert die Semantik der automatischen Variablen in Sprachen wie C und Java.
Variablen im globalen Namespace sind für den Code der Ausgangsebene sichtbar, innerhalb eines proc-Befehls sind sie standardmäßig jedoch nicht sichtbar. Sie können die Variablen sichtbar machen, indem Sie sie global deklarieren. Verwenden Sie dazu den Befehl global. Für die von Ihnen angegebenen Variablennamen erstellt der Befehl global Einträge im lokalen Namespace, die auf die Einträge im globalen Namespace zeigen, die die Variablen tatsächlich definieren.
Wenn Sie in einem proc-Befehl ein vom Tool wsadmin bereitgestelltes Scripting-Objekt verwenden, müssen Sie es vorher global deklarieren. Beispiel:
proc { ... } {
global AdminConfig
... [$AdminConfig ...]
}
Scripts mit einem anderen Script aufrufen
Verwenden Sie den source-Befehl, um ein Jacl-Script mit einem anderen Jacl-Script aufzurufen. Beispiel:
Erstellen Sie ein Script mit dem Namen test1.jacl.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
source c:/temp/script/testProcedure.jacl
printName Cathy Smith
![[z/OS]](../images/ngzos.gif)
source /temp/script/testProcedure.jacl
printName Cathy Smith
Erstellen Sie ein Script mit dem Namen testProcedure.jacl.
proc printName {first last} {
puts "My name is $first $last"
}
Übergeben Sie den folgenden Pfad als Scriptargument.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
wsadmin -lang jacl -f c:/temp/script/test1.jacl
![[z/OS]](../images/ngzos.gif)
wsadmin -lang jacl -f '/temp/script/test1.jacl'
Sie müssen Schrägstriche (/) als Pfadtrennzeichen verwenden. Die Verwendung von Backslashs (\) ist nicht zulässig.
Umleitung mit dem Befehl "exec"
Der folgende Jacl-Befehl exec für die Umleitung funktioniert nicht auf Linux-Plattformen:
eval exec ls -l > /tmp/out
Der Befehl exec der Scripting-Sprache Jacl unterstützt die Umleitung nicht vollständig, daher kann es auf einigen Plattformen zu Problemen kommen.
Verwenden Sie keine Umleitung, wenn Sie den Befehl exec der Sprache Jacl verwenden. Stattdessen können Sie den Befehl exec für die Umleitung in einer Variable speichern und ihn in eine Datei schreiben. Beispiel:
open /tmp/out w puts $fileId $result close $fileId
In einigen Fällen können Sie eine Umleitung auch mit einer Shell und einem .sh-Befehl realisieren. Eine mit Tcl abgesetzte Umleitung funktioniert nicht.