TCL TK-Tutorial: Tool-Befehlssprache
Was ist TCL?
TCL ist eine Shell-Anwendung, die TCL-Befehle aus ihrer Standardeingabe oder aus einer Datei liest und die gewünschten Ergebnisse liefert.
TCL ist eine stringbasierte Skriptsprache und auch eine prozedurale Sprache. Sie wurde erstmals 1989 von John Osterhout entwickelt. Der Zweck der Entwicklung dieser Sprache ist die einfache Einbettung von inti( )-Anwendungen. Die Sprache wird häufig für GUIs und Tests verwendet. Zum Beispiel Rapid Prototyping, Testen Datenbankinteraktion usw. In TCL ist standardmäßig alles eine Zeichenfolge.
In diesem Tutorial lernen Sie-
- Was ist TCL?
- So führen Sie TCL aus
- TCL-Skripte
- TCL-Ersetzungstyp
- TCL-Variable
- TCL-Ausdruck und OperaDo.
- TCL-Flusskontrolle und Entscheidungsfindung
So führen Sie TCL aus
Es gibt zwei Möglichkeiten, TCL-Code auszuführen
- Windows Die entsprechende Anwendung finden Sie hier tcltutor exe-Datei
- Linux-basierte Anwendung
In Linux Mit dem interaktiven Interpreter können wir die TCL-Skripte wie folgt ausführen
Um auf die interaktive TCL-Sitzung zuzugreifen, führen Sie den folgenden Befehl aus
TCL-Skripte
Das TCL-Programm sollte die Erweiterung .tcl haben. Jedes Skript unter UNIX/LINUX beginnt mit dem TCL-Shell-Pfad
#!/usr/bin/tclsh
Beispiel:-
#!/usr/bin/tclsh Puts "Hello World" Script execution:- $ chmod +x helloworld.tcl $ ./helloworld.tcl
Ausgang: Hallo Welt
In TCL wird der Befehl „Puts“ verwendet, um Nachrichten an die Konsole zu drucken. Die Syntax von Puts finden Sie unten
setzt?-nonenewline? ?Kanal ID? Zeichenfolge
- Keine neue Zeile: Dieser optionale Parameter unterdrückt standardmäßig das Newline-Zeichen. Es fügt jeder Zeichenfolge eine neue Zeile hinzu
- Kanal ID: Dieser Parameter wird für den Standardeingabekanal (stdin) und den Standardausgabekanal (stdout) verwendet.
Ex:-
%puts "Hello World" % Hello World %puts stdout "Hello World" % Hello World
TCL-Ersetzungstyp
In TCL gibt es drei Arten von Ersetzungen
- Befehlsersetzung
- Variablensubstitution
- Backslash-Ersetzung
Lasst uns einzeln lernen
Befehlsersetzung
Zur Befehlsersetzung werden eckige Klammern verwendet.
Beispiel:-
% puts [expr 1*3] % 3
Hier wird zuerst der Befehl zwischen den eckigen Klammern ausgewertet. Als Ergebnis wird „expr“ zurückgegeben, der zur Durchführung der arithmetischen Berechnung verwendet wird.
Variablensubstitution
TCL führt die Variablensubstitution mithilfe von durch $ Schild.
Beispiel:-
#!/usr/bin/tclsh set a 10 puts a puts $a
Hier erstellen wir eine Variable namens „a“ und setzen den Wert „10“ darauf.
- puts a: Es wird die Zeichenfolge „a“, aber nicht der Wert von „a“ an die Konsole ausgegeben
- puts $a: Der Wert von „a“ wird auf der Konsole ausgegeben
Lassen Sie es uns ausführen und überprüfen. Sie erhalten die folgende Ausgabe.
$ ./substitution.tcl
a
10
Backslash-Ersetzung
In Tcl wird der Backslash zum Maskieren von Sonderzeichen sowie zum Verteilen langer Befehle auf mehrere Zeilen verwendet. Alle Zeichen, die unmittelbar auf den Backslash folgen, bleiben unverändert. Im folgenden Beispiel sehen Sie, dass das Sonderzeichen „ “ nach dem Backslash erhalten bleibt.
Lassen Sie uns dies anhand eines Beispiels überprüfen
#!/usr/bin/tclsh puts "This is my \"car\" $ ./backslashsubstitution.tcl This is my "car"
HINWEIS: -Zum Kommentieren einer beliebigen Zeichenfolge in TCL wird „#“ verwendet. Alle Zeichen nach dem „#“ werden vom Shell-Befehl tclsh ignoriert.
TCL-Variable
Eine Variable ist ein Bezeichner, der einen Wert enthält. Mit anderen Worten: Eine Variable ist ein Verweis auf einen Computerspeicher, in dem der Wert gespeichert ist.
Variablen werden mit „set command“ erstellt und bei allen Variablennamen muss die Groß-/Kleinschreibung beachtet werden. Es bedeutet Hallo, Hallo, HALLO, in TCL sind alle unterschiedlich. Schauen Sie sich ein Beispiel für eine Variable an, bei der die Groß-/Kleinschreibung beachtet wird.
% set name Techoit % set Name Technoit_1 % set NAME Technoit_2
Ausgabe:-
% puts $name % Technoit %puts $Name %Technoit_1 %puts $NAME %Technoit_2
Erstellen von TCL-Variablen
Um Variablen in TCL zu erstellen, müssen Sie verwenden "einstellen" Befehl
Legen Sie eine 10 fest
Um den Wert der Variablen zu erhalten, müssen Sie das Symbol „$“ verwenden
% legte $a
10%
Wir erhalten also den Wert der Variablen „a“ als 10.
TCL-Befehlsinformationen vorhanden
Der Befehl „set“ wird verwendet, um Variablen zu erstellen und zu lesen, wie oben gezeigt. Der Befehl „unset“ wird verwendet, um eine Variable zu löschen. Der Befehl „info exists“ gibt 1 zurück, wenn varName als Variable (oder Array-Element) im aktuellen Kontext existiert, andernfalls 0. (siehe Beispiel unten).
In TCL gibt es verschiedene „Info“-Befehle wie „Info existiert“, „Info-Funktionen“, „Info global“ und so weiter. Hier sehen wir ein Beispiel für „Info vorhanden“.
Ex:-
% set a 20 % puts $a % 20 % puts [info exists a] % 1 % unset a %puts [info exists a] % 0
Verschiedene Zahnspangen und ihr Verhalten
{} -> Geschweifte Klammern
Geschweifte Klammern in TCL gruppieren Wörter zu Argumenten. Geschweifte Klammern werden verwendet, um einen Block zu definieren, der zurückgestellt wird – mit anderen Worten, er kann NACH dem Rest des Befehls in der aktuellen Zeile ausgeführt werden. Zeichen in geschweiften Klammern werden genau wie geschrieben an einen Befehl übergeben.
Einige Punkte, die Sie beachten sollten
- Das Ersetzen von Variablen innerhalb von {}-Klammern ist nicht zulässig
- Es wurde zum Erstellen des Listendatentyps verwendet
Beispiel:-
% set x 10 % puts {$x} % $x
%set number {1 2 3 4 5} -> Hier ist number ein Listendatentyp
%puts $number
%1 2 3 4 5
[] -> eckige Klammern
Eckige Klammern werden verwendet, um verschachtelte Befehle zu erstellen. Einfach ausgedrückt wird die Ausgabe eines Befehls als Argument an einen anderen Befehl übergeben. Eckige Klammern werden verwendet, um einen Block zu definieren, der VOR dem Rest des Befehls in der aktuellen Zeile ausgeführt wird, und das Ergebnis wird in die Zeile eingesetzt.
Ex: -
% set x 10 % puts "y : [set y [set x 10]]" %y : 10 % puts "x : $x" %x : 10
() -> runde Klammern
Mit diesem Befehl wird der Array-Datentyp erstellt und die Operatorpriorität angegeben.
% set a(1) 10 % set a(2) 20
Hier ist „a“ ein Array mit den Werten 10 und 20. Siehe unten Befehle zum Drucken von Schlüsseln, Schlüsselwertpaaren und Arraywerten.
% puts [array get a] -> To print key value pairs we use this command % 1 10 2 20 % puts [array names a] -> To print only keys % 1 2 % puts $a(1) -> To print first value of array % 10 % puts $a(2) -> To print second value of array % 20
Um den „N-ten“ Wert des Arrays a auszugeben, verwenden wir Puts $a(N)
TCL-Befehlszeilenargumente
Datenelemente, die über die Befehlszeile an ein Skript übergeben werden, werden als Argumente bezeichnet. Die Anzahl der Befehlszeilenargumente an ein Tcl-Skript wird als globale Variable übergeben Argc . Der Name eines Tcl-Skripts wird als globale Variable an das Skript übergeben argv0 , und die restlichen Befehlszeilenargumente werden als Liste übergeben argv.
TCL verfügt über 3 vordefinierte Variablen, z
$argc -> indicates the number of arguments passed to the script $argv -> indicates list of arguments $argv0 -> indicates the name of script
Ex:-
arg-script.tcl #!/usr/bin/tclsh< puts "number of arguments passed to the scripts : $argc" puts "list of arguments are passed to the script: $argv" puts "the name of scripts is: $argv0"
$ ./arg-script.tcl 10 20 30
Möglichkeiten für das Ausgangssignal::-
- Anzahl der an die Skripte übergebenen Argumente: 3
- Liste der Argumente, die an das Skript übergeben werden: 10 20 30
- Der Name des Skripts lautet: arg-script.tcl
TCL-Ausdruck und OperaDo.
Der Ausdruck wird aus Operanden und Operatoren erstellt. Er wird mit dem Befehl „expr“ ausgewertet. Operators werden basierend auf Vorrang und Assoziativität ausgewertet. Die TCL-Sprache hat integrierte Operatoren wie unten
Operator-Kategorie | Symbol | Vorrang/Assoziativität |
---|---|---|
Arithmetik OperaDo. | + - * / % | Von links nach rechts |
Relational OperaDo. | == != < > <= >= | Links nach rechts |
logisch OperaDo. | && || ! | Links nach rechts |
Bitweise OperaDo. | & | ^ ~ | Links nach rechts |
Ternary OperaDo. | ?: | Rechts nach links |
Shift OperaDo. | << >> | Links nach rechts |
String-Vergleich OperaDo. | Gl. ne | Links nach rechts |
Potenzierung OperaDo. | ** | Links nach rechts |
Liste OperaDo. | In ni | Links nach rechts |
Arithmetik OperaDo.
Ein TCL-Ausdruck besteht aus einer Kombination von Operanden, Operatoren und Klammern. Sehen wir uns ein Beispiel für arithmetische Operatoren in TCL an
+ Zwei oder mehr Operanden hinzufügen
Ex:-
%set a 10 %set b 20 %puts [expr $a + $b] 30
- Subtrahiert zwei oder mehr Operanden
Ex:-
%set a 20 %set b 10 %puts [expr $a - $b] 10
*Multiplizieren Sie zwei oder mehr Operanden
%set a 20 %set b 10 %puts [expr $a * $b] 200
/ Zähler durch Nenner dividieren
%set a 20 %set b 10 %puts [expr $a / $b] 2
% Der Modulo-Operator dividiert den Zähler durch den Nenner, gibt aber eine Erinnerung zurück
%set a 20 %set b 10 %puts [expr $a % $b] 0
Relational OperaDo.
Überprüft, ob der Wert des linken Operanden größer ist als der Wert des rechten Operanden. Wenn ja, wird die Bedingung erfüllt und es wird 1 zurückgegeben, andernfalls 0.
%set a 20 %set b 10 %puts [expr $a > $b] 1
Überprüfen Sie, ob der Wert des linken Operanden kleiner ist als der Wert des rechten Operanden. Wenn ja, wird die Bedingung erfüllt und es wird 1 zurückgegeben, andernfalls 0.
%set a 10 %set b 20 %puts [expr $a < $b] 1
>= Überprüft, ob der Wert des linken Operanden größer oder gleich dem Wert des rechten Operanden ist. Wenn ja, wird die Bedingung erfüllt und es wird 1 zurückgegeben, andernfalls 0.
%set a 20 %set b 10 %puts [expr $a >= $b] 1
<= Überprüft, ob der Wert des linken Operanden kleiner oder gleich dem Wert des rechten Operanden ist. Wenn ja, wird die Bedingung erfüllt und es wird 1 zurückgegeben, andernfalls 0.
%set a 20 %set b 10 %puts [expr $a <= $b] 0
!= Überprüft, ob die Werte der beiden Operanden gleich sind oder nicht. Wenn die Werte nicht gleich sind, wird die Bedingung erfüllt und es wird 1 zurückgegeben, andernfalls 0.
%set a 20 %set b 10 %puts [expr $a != $b] 1
== Überprüft, ob die Werte der beiden Operanden gleich sind oder nicht. Wenn ja, wird die Bedingung erfüllt und es wird 1 zurückgegeben, andernfalls 0.
%set a 20 %set b 10 %puts [expr $a == $b] 0
logisch OperaDo.
&& Wenn beide Operanden ungleich Null sind, wird die Bedingung erfüllt und es wird 1 zurückgegeben, andernfalls 0
%set a 20 %set b 10 %puts [expr $a && $b] 1
|| Wenn einer der beiden Operanden ungleich Null ist, wird die Bedingung erfüllt und es wird 1 zurückgegeben, andernfalls wird 0 zurückgegeben.
%set a 0 %set b 10 %puts [expr $a || $b] 1
! Wird verwendet, um das Ergebnis eines beliebigen Ausdrucks umzukehren. Hier in der Ausgabe können Sie sehen, dass der Wert von „a“ jetzt von 1 zu 0 geworden ist, während der Wert von „b“ von 0 zu 1 geworden ist.
%set a 0 %set b 1 %puts [expr !$a] 1 %puts [expr !$b] 0
Bitweise OperaDo.
& (bitweises Und) führt die Operation Bit für Bit durch und folgt für die Operation der folgenden Tabelle.
A | B | A & B. |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
1 | 0 | 0 |
Ex:-
%set A 10 %set B 20 Follow the sequence to convert decimal to binary number 128 64 32 16 8 4 2 1 10 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 0 1 0 1 0 20 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 1 0 1 0 0 So now as per above tabular rules A & B will be 0 0 0 0 0 0 0 0
| (bitweises Oder) Führen Sie die Operation Bit für Bit durch und folgen Sie der folgenden Tabelle
A | B | Ein | B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 1 | 1 |
1 | 0 | 1 |
Ex:-
%set A 10 %set B 20 Follow the sequence to convert decimal to binary number 128 64 32 16 8 4 2 1 10 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 0 1 0 1 0 20 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 1 0 1 0 0 So now as per above tabular rules A | B will be 0 0 0 1 1 1 1 0
^ (bitweises Exklusiv-Oder) Führen Sie die Bit-für-Bit-Operation durch und folgen Sie der folgenden Tabelle
A | B | A ^ B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 1 | 0 |
1 | 0 | 1 |
Ex:-
%set A 10 %set B 20 Follow the sequence to convert decimal to binary number 128 64 32 16 8 4 2 1 10 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 0 1 0 1 0 20 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 1 0 1 0 0 So now as per above tabular rules A ^ B will be 0 0 0 1 1 1 1 0 à 30
~ (bitweise Negation) Der Operator ändert jeweils 1 in 0 und 0 in 1, folgen Sie der Tabelle als Referenz
A | ~A |
---|---|
0 | 1 |
1 | 0 |
%set A 7 %puts [expr ~$A] -8
Ternary Operator ( ?:)
Syntax ist
condition-expression? expression_1: expression_2
Wenn „condition-exp“ wahr ist, wird exp1 ausgewertet und das Ergebnis zurückgegeben. Wenn cond-exp falsch ist, wird exp2 ausgewertet und das Ergebnis zurückgegeben. In unserem Beispiel ist exp1 wahr, da der Wert von A größer als 6 ist.
%set A 7 %set result [expr $A > 6 ? true : false] %puts $result true
Shift OperaDo.
Shift Der Operator wird entweder durch den Linksschiebeoperator << oder durch den Rechtsschiebeoperator >> gekennzeichnet. Beim Linksschiebeoperator << wird der Wert des linken Operanden um die Anzahl der Bits nach links verschoben, die durch den rechten Operanden angegeben wird.
%set A 7 %set result [expr $A << 2] %puts $result
Beim Rechtsverschiebungsoperator >> wird der Wert des linken Operanden um die durch den rechten Operanden angegebene Anzahl Bits nach rechts verschoben.
%set A 7 %set result [expr $A >> 2] %puts $result
String-Vergleich OperaDo.
Der String-Vergleichsoperator vergleicht die Werte beider Operanden. Wenn die Werte der Operanden gleich sind, wird 1 zurückgegeben, andernfalls 0. Im Beispiel ist der Wert für A und B 7, daher wird als Ergebnis 1 zurückgegeben.
Ex:-
%set A 7 %set B 7 %set result [expr $A eq $B] %puts $result 1
Ne (wenn die Werte beider Operanden unterschiedlich sind, wird 1 zurückgegeben, andernfalls 0)
%set A 7 %set B 8 %set result [expr $A ne $B] %puts $result 1
Potenzierungsoperator
Pow() und ** sind beide gleich. Es gibt immer einen Gleitkommawert zurück.
** gibt die Potenz des gewünschten Operanden an.
Ex:-
%set A 7 %set result [expr $A ** 2] %puts $result 49
Liste OperaDo.
Wenn der erforderliche Wert in der definierten Liste gefunden wird, wird 1 zurückgegeben, andernfalls wird 0 zurückgegeben. Im Beispiel ist der Wert 1 in der Variablen „a“ vorhanden, daher wird 1 zurückgegeben.
set a {1 2 3} if {1 in $a} { puts "ok" } else { puts "fail" } Output: ok
ni, wenn der erforderliche Wert in der definierten Liste gefunden wird, wird 0 zurückgegeben, andernfalls wird 1 zurückgegeben.
Ex :-
set a {1 2 3} if {1 ni $a} { puts "ok" } else { puts "fail" } Output: fail
TCL-Flusskontrolle und Entscheidungsfindung
Es gibt verschiedene Befehle zur Flusskontrolle und Entscheidungsfindung, mit denen der Fluss eines Programms geändert werden kann. Programmausführungen beginnen immer von oben nach unten in der Quelldatei.
Die If-Anweisung besteht aus einem booleschen Ausdruck, gefolgt von einer oder mehreren Anweisungen.
Wenn ... Aussage
Syntax:-
wenn expr ?dann? Körper
Wenn expr als wahr ausgewertet wird, wird der Befehlstext ausgeführt.
Ex:-
set age 10 if {$age < 20} { puts "Age is less than 20" } Output: Age is less than 20
If ... else-Anweisung
Syntax :-
Wenn Ausdruck? dann body_1, sonst body_2
Wenn der Ausdruck als wahr ausgewertet wird, wird body_1 zurückgegeben, andernfalls wird body_2 zurückgegeben
Ex:--
set age 10 if {$age < 20} { puts "Age is less than 20" } else { Puts "Age is greater than 20" } output: Age is less than 20
Verschachtelte if..else-Anweisung
Es bedeutet, dass eine if- oder else..if-Anweisung in eine andere if- oder else..if-Anweisung eingefügt werden kann.
Syntax:-
If {expression_1} { Body_1 If {expression_2} { Body_2 } }
Ex:--
set a 10 set b 20 if {$a == 10} { # if expression_1 is true then it will go to expression_2 if {$b == 20} { #if expression_2 is true then it will print the below string puts "value of a is 10 and b is 20" } } o/p: value of a is 10 and b is 20
Switch-Anweisung
Mit der switch-Anweisung kann eine Variable anhand einer Liste von Werten auf Gleichheit getestet werden. Es wertet die Werteliste aus und gibt das Ergebnis dieser Bewertung zurück. Wenn keine Werte übereinstimmen, werden Standardwerte zurückgegeben.
Beispiel:
#!/usr/bin/tclsh # switch_cmd.tcl set domain x switch $domain { x { puts "x" } y { puts "y" } z { puts "z" } default { puts "unknown" } }
Verschachtelter Schalter
Eine verschachtelte Switch-Anweisung bedeutet eine Switch-Anweisung innerhalb einer Switch-Anweisung.
Syntax :-
switch <switchingstring1> { <matchstring1> { body1 switch <switchingstring2> { <matchstring2> { body2 } ... switch <switchingstringN> { <matchStringN> { bodyN } } }
Beispiel: Im folgenden Beispiel ist der Wert von a gleich 100, und mit demselben Code wechseln wir zur Anweisung für einen anderen Wert von b, nämlich 200. Die Ausgabe zeigt die Werte sowohl für a als auch für b.
#!/usr/bin/tclsh set a 100 set b 200 switch $a { 100 { puts "The value of a is $a" switch $b { 200 { puts "The value of b is $b" } } } }
Ausgabe:-
Der Wert von a ist 100
Der Wert von b beträgt 200
TCL-Loop-Anweisung
Mit Schleifenanweisungen können Sie eine Anweisung oder eine Gruppe von Anweisungen mehrmals ausführen. Tcl bietet die folgenden Arten von Schleifenanweisungen.
Während Befehl
Wenn eine bestimmte Bedingung wahr ist, wird eine Anweisung oder eine Gruppe von Anweisungen wiederholt, die sich im Schleifenkörper befinden.
Syntax:
While {condition} { Statements }
Ex :-
#!/usr/bin/tclsh Set a 10 While {$a < 12} { Puts "a is $a" incr a }
Ausgabe:-
a ist 10
a ist 11
Im obigen Beispiel wird der integrierte Befehl „incr“ verwendet. Dies bedeutet, dass der Wert von „a“ um 1 bis zum Maximalwert (<12) erhöht wird.
Für Befehl
Es führt eine Folge von Anweisungen mehrmals basierend auf einem Zählerwert aus. Sie wird bei jeder Wiederholung der Schleife automatisch erhöht oder verringert.
Syntax :-
For {start} {test} {next} { Body }
Beispiel: Im folgenden Beispiel wird der Wert von „i“ auf 0 gesetzt und bis zum Wert <5 erhöht.
#!/usr/bin/tclsh for {set i 0} {$i < 5} {incr i} { put $i }
Ausgabe:-
0 1 2 3 4
Zusammenfassung:
- TCL ist eine stringbasierte Skriptsprache und auch eine prozedurale Sprache
- Die Sprache wird häufig für GUIs und Tests verwendet
- In TCL ist standardmäßig alles ein String
- TCL ist eine Shell-Anwendung, die TCL-Befehle aus ihrer Standardeingabe oder aus einer Datei liest und die gewünschten Ergebnisse liefert.
- Das TCL-Programm sollte die Erweiterung .tcl haben