TCL TK-zelfstudie: Toolopdrachttaal
Wat is TCL?
TCL is een shell-applicatie die de TCL-opdracht leest vanuit de standaardinvoer of vanuit een bestand en de gewenste resultaten oplevert.
TCL is een op strings gebaseerde scripttaal en ook een procedurele taal. Het werd voor het eerst gemaakt door John Osterhout in 1989. Het doel van het ontwikkelen van deze taal is het eenvoudig inbedden inti()-applicaties. De taal wordt vaak gebruikt voor GUI's en testen. Bijvoorbeeld rapid prototyping, Testen database-interactie, enz. In TCL is alles standaard een string.
In deze tutorial leer je-
- Wat is TCL
- Hoe TCL uit te voeren
- TCL-scripts
- TCL-vervangingstype
- TCL-variabele
- TCL-expressie en Operator
- TCL-stroomcontrole en besluitvorming
Hoe TCL uit te voeren
Er zijn twee manieren om TCL-code uit te voeren
- Windows gebaseerde applicatie is hier beschikbaar tcltutor exe-bestand
- Linux-gebaseerde applicatie
In Linux interactieve tolk, kunnen we de TCL-scripts uitvoeren zoals hieronder
Om toegang te krijgen tot de interactieve TCL-sessie, voert u de volgende opdracht uit
TCL-scripts
TCL-programma moet de extensie .tcl hebben. Elk script in UNIX/LINUX begint met het TCL-shellpad
#!/usr/bin/tclsh
Voorbeeld:-
#!/usr/bin/tclsh Puts "Hello World" Script execution:- $ chmod +x helloworld.tcl $ ./helloworld.tcl
uitgang: Hallo Wereld
In TCL wordt het commando "Puts" gebruikt om berichten naar de console af te drukken. De syntaxis van puts staat hieronder
zet?-geen nieuwe regel? ?Kanaal Nr? snaar
- Geen nieuwe lijn: Deze optionele parameter onderdrukt standaard het nieuweregelteken. Er wordt een nieuwe regel aan elke string toegevoegd
- Kanaal Nr: Deze parameter wordt gebruikt voor standaard ingangskanaal (stdin) en standaard uitgangskanaal (stdout).
Ex:-
%puts "Hello World" % Hello World %puts stdout "Hello World" % Hello World
TCL-vervangingstype
Er zijn drie soorten vervangingen in TCL
- Opdrachtvervanging
- Variabele vervanging
- Backslash-vervanging
Laten we één voor één bestuderen
Opdrachtvervanging
Vierkante haken worden gebruikt voor het vervangen van opdrachten.
Voorbeeld:-
% puts [expr 1*3] % 3
Hier wordt het commando tussen de vierkante haken als eerste geëvalueerd. De resultaten worden geretourneerd .”expr” gebruikt voor het uitvoeren van de rekenkundige berekening.
Variabele vervanging
TCL voert variabelenvervanging uit met behulp van $ teken.
Voorbeeld:-
#!/usr/bin/tclsh set a 10 puts a puts $a
Hier maken we een variabele met de naam “a” en stellen we daar de waarde “10” voor in.
- puts a : Het zal de string “a” afdrukken, maar niet de waarde van 'a' naar de console
- puts $a : Het zal de waarde van 'a' naar de console afdrukken
Laten we het uitvoeren en verifiëren. U krijgt de uitvoer zoals hieronder.
$ ./substitution.tcl
a
10
Backslash-vervanging
In Tcl wordt de backslash gebruikt om speciale tekens te ontsnappen en om lange commando's over meerdere regels te verspreiden. Elk teken dat direct na de backslash volgt, blijft staan zonder vervanging. In het onderstaande voorbeeld ziet u dat het speciale teken ” “, na de backslash blijft staan.
Laten we dit verifiëren met een voorbeeld
#!/usr/bin/tclsh puts "This is my \"car\" $ ./backslashsubstitution.tcl This is my "car"
OPMERKING: -Voor commentaar wordt elke tekenreeks in TCL “#” gebruikt. Alle tekens na de “#” worden genegeerd door de tclsh shell-opdracht.
TCL-variabele
Een variabele is een identificatie die een waarde bevat. Met andere woorden: een variabele is een verwijzing naar een computergeheugen, waar de waarde wordt opgeslagen.
Variabelen worden aangemaakt door “set command” en alle namen van variabelen zijn hoofdlettergevoelig. Het betekent hallo, hallo, hallo, ze zijn allemaal verschillend in TCL. Bekijk een voorbeeld van een hoofdlettergevoelige variabele.
% set name Techoit % set Name Technoit_1 % set NAME Technoit_2
Uitgang: -
% puts $name % Technoit %puts $Name %Technoit_1 %puts $NAME %Technoit_2
TCL-variabelen maken
Om variabelen in TCL te maken, moet u gebruiken "set" commando
Zet een 10
Om de waarde van de variabele te verkrijgen, moet u het symbool “$” gebruiken, zoals
% zet $a
10%
We krijgen dus de waarde van variabele 'a' als 10.
TCL-opdrachtinformatie bestaat
De opdracht "set" wordt gebruikt om variabelen te maken en te lezen zoals hierboven weergegeven. De opdracht unset wordt gebruikt om een variabele te vernietigen. De opdracht "info exists" retourneert 1 als varName bestaat als een variabele (of een array-element) in de huidige context, anders retourneert het 0. (zie voorbeeld hieronder).
Er zijn verschillende “info” -opdrachten in TCL, zoals “info bestaat”, “info functies”, “info global”, enzovoort. Hier zien we een voorbeeld van “info bestaat”.
Ex:-
% set a 20 % puts $a % 20 % puts [info exists a] % 1 % unset a %puts [info exists a] % 0
Verschillende beugels en hun gedrag
{} -> Accolades
Accolades in TCL groeperen woorden samen om argumenten te worden. Accolades worden gebruikt om een blok te definiëren dat is uitgesteld – met andere woorden: het mag NA de rest van het commando op de huidige regel worden uitgevoerd. Tekens tussen accolades worden precies zoals geschreven aan een opdracht doorgegeven.
Enkele punten om te onthouden
- Vervanging van variabelen is niet toegestaan tussen accolades {}
- Vroeger werd er een lijstgegevenstype gemaakt
Voorbeeld:-
% set x 10 % puts {$x} % $x
%set nummer {1 2 3 4 5} -> Hier is nummer een lijstgegevenstype
%vult $getal in
%1 2 3 4 5
[] -> vierkante accolades
Vierkante haken worden gebruikt om geneste opdrachten te maken. Simpel gezegd, uitvoer van een opdracht die als argument aan een andere opdracht wordt doorgegeven. Vierkante haken worden gebruikt om een blok te definiëren dat wordt uitgevoerd VOORDAT de rest van de opdracht op de huidige regel wordt uitgevoerd, en het resultaat wordt in de regel gesubstitueerd.
Ex: -
% set x 10 % puts "y : [set y [set x 10]]" %y : 10 % puts "x : $x" %x : 10
() -> ronde accolades
Met deze opdracht kunt u een array-gegevenstype maken en de prioriteit van de operator aangeven.
% set a(1) 10 % set a(2) 20
Hier is “a” een array met waarde 10 en 20. Zie onderstaande opdrachten om sleutels, sleutelwaardeparen en waarden van array af te drukken.
% 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
Voor het afdrukken van de “N-de” waarde van array a gebruiken we Puts $a(N)
TCL-opdrachtregelargumenten
Gegevensitems die vanaf de opdrachtregel aan een script worden doorgegeven, worden argumenten genoemd. Het aantal opdrachtregelargumenten aan een Tcl-script wordt doorgegeven als de globale variabele argc . De naam van een Tcl-script wordt als de globale variabele aan het script doorgegeven argv0 , en de rest van de opdrachtregelargumenten worden als lijst doorgegeven argv.
TCL heeft 3 vooraf gedefinieerde variabelen, zoals
$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
uitvoer:-
- Aantal argumenten doorgegeven aan de scripts: 3
- Lijst met argumenten wordt doorgegeven aan het script: 10 20 30
- De naam van het script is: arg-script.tcl
TCL-expressie en Operator
Expressie is opgebouwd uit operanden en operatoren. Het wordt geëvalueerd met de opdracht "expr". Operators worden geëvalueerd op basis van precedentie en associativiteit. TCL-taal heeft ingebouwde operatoren zoals hieronder
Operator Categorie | Symbool | Voorrang/associativiteit |
---|---|---|
Rekenkunde Operator | + - * / % | Links naar rechts |
relationele Operator | == != < > <= >= | Van links naar rechts |
logisch Operator | && || ! | Van links naar rechts |
bitsgewijze Operator | & | ^ ~ | Van links naar rechts |
Ternair Operator | ?: | Rechts naar links |
Shift Operator | << >> | Van links naar rechts |
String-vergelijking Operator | vgl | Van links naar rechts |
machtsverheffen Operator | ** | Van links naar rechts |
Lijst Operator | In ni | Van links naar rechts |
Rekenkunde Operator
Een TCL-expressie bestaat uit een combinatie van operanden, operatoren en haakjes. Laten we een voorbeeld bekijken van rekenkundige operatoren in TCL
+ Voeg twee of meer operanden toe
Ex:-
%set a 10 %set b 20 %puts [expr $a + $b] 30
- Trekt twee of meer operanden af
Ex:-
%set a 20 %set b 10 %puts [expr $a - $b] 10
*Vermenigvuldig twee of meer operanden
%set a 20 %set b 10 %puts [expr $a * $b] 200
/ Deel teller door noemer
%set a 20 %set b 10 %puts [expr $a / $b] 2
% Modulus-operator deelt de teller door de deteller, maar retourneert een herinnering
%set a 20 %set b 10 %puts [expr $a % $b] 0
relationele Operator
Controleert of de waarde van de linker operand groter is dan de waarde van de rechter operand. Indien ja, dan wordt de conditie waar en retourneert 1, anders retourneert 0.
%set a 20 %set b 10 %puts [expr $a > $b] 1
Controleer of de waarde van de linker operand kleiner is dan de waarde van de rechter operand. Zo ja, dan wordt de conditie waar en retourneert 1, anders retourneert 0
%set a 10 %set b 20 %puts [expr $a < $b] 1
>= Controleert of de waarde van de linker operand groter is dan of gelijk is aan de waarde van de rechter operand. Als dat zo is, wordt de voorwaarde waar en wordt 1 geretourneerd, anders wordt 0 geretourneerd.
%set a 20 %set b 10 %puts [expr $a >= $b] 1
<= Controleert of de waarde van de linker operand kleiner of gelijk is aan de waarde van de rechter operand. Als dat zo is, wordt de voorwaarde waar en wordt 1 geretourneerd, anders wordt 0 geretourneerd.
%set a 20 %set b 10 %puts [expr $a <= $b] 0
!= Controleert of de waarden van twee operanden gelijk zijn of niet. Als de waarden niet gelijk zijn, wordt de voorwaarde waar en wordt 1 geretourneerd, anders wordt 0 geretourneerd.
%set a 20 %set b 10 %puts [expr $a != $b] 1
== Controleert of de waarden van twee operanden gelijk zijn of niet. Als dat zo is, wordt de voorwaarde waar en wordt 1 geretourneerd. Anders wordt 0 geretourneerd.
%set a 20 %set b 10 %puts [expr $a == $b] 0
logisch Operator
&& Als beide operanden niet nul zijn, wordt de voorwaarde waar en retourneert 1, anders retourneert 0
%set a 20 %set b 10 %puts [expr $a && $b] 1
|| Als een van de twee operanden niet nul is, wordt de voorwaarde waar en retourneert 1, anders retourneert 0
%set a 0 %set b 10 %puts [expr $a || $b] 1
! Wordt gebruikt om het resultaat van een expressie om te keren. Hier in de uitvoer kun je zien dat de waarde van 'a' nu 1 van 0 is geworden. Terwijl de waarde van 'b' 0 van 1 is geworden.
%set a 0 %set b 1 %puts [expr !$a] 1 %puts [expr !$b] 0
bitsgewijze Operator
& (bitsgewijs en) voert een bit-voor-bit-bewerking uit en volgt de onderstaande tabel voor de bediening.
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
| (bitgewijs of) voer een bit-voor-bit-bewerking uit en volg de onderstaande tabel
A | B | een | 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
^ (bitgewijs exclusief of) voer een bit-voor-bit-bewerking uit en volg de onderstaande tabel
A | B | EEN ^ 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
~ (bitgewijze ontkenning) operator verandert elke 1 in 0 en 0 in 1, volg de tabel als referentie
A | ~A |
---|---|
0 | 1 |
1 | 0 |
%set A 7 %puts [expr ~$A] -8
Ternair Operator (?:)
Syntaxis is
condition-expression? expression_1: expression_2
Als voorwaarde-exp waar is, wordt exp1 geëvalueerd en wordt het resultaat geretourneerd. Als de cond-exp onwaar is, wordt exp2 geëvalueerd en wordt het resultaat geretourneerd. In ons voorbeeld is exp1 waar omdat de waarde van A groter is dan 6.
%set A 7 %set result [expr $A > 6 ? true : false] %puts $result true
Shift Operator
Shift operator wordt aangeduid met << left shift operator, of met de >> right shift operator. Voor << left shift operator, wordt de waarde van de linker operand naar links verplaatst met het aantal bits dat is opgegeven door de rechter operand.
%set A 7 %set result [expr $A << 2] %puts $result
Voor de >> right shift operator wordt de waarde van de linker operand naar rechts verplaatst met het aantal bits dat door de rechter operand is opgegeven.
%set A 7 %set result [expr $A >> 2] %puts $result
String-vergelijking Operator
Stringvergelijkingsoperator vergelijkt de waarde van beide operanden. Als de waarde van de operand hetzelfde is, retourneert deze 1, anders retourneert deze 0. In het voorbeeld is de waarde voor zowel A als B 7, dus retourneert het resultaat 1.
Ex:-
%set A 7 %set B 7 %set result [expr $A eq $B] %puts $result 1
Ne (als de waarde van beide operanden verschillend is, wordt 1 geretourneerd, anders wordt 0 geretourneerd)
%set A 7 %set B 8 %set result [expr $A ne $B] %puts $result 1
Machtsverheffende operator
Pow () en ** zijn beide hetzelfde. Het retourneert altijd een zwevende waarde.
** geeft de macht van de gewenste operand aan.
Ex:-
%set A 7 %set result [expr $A ** 2] %puts $result 49
Lijst Operator
Als de vereiste waarde in de gedefinieerde lijst wordt gevonden, retourneert deze 1, anders wordt 0 geretourneerd. In het voorbeeld bestaat waarde 1 in variabele 'a' en wordt daarom 1 geretourneerd.
set a {1 2 3} if {1 in $a} { puts "ok" } else { puts "fail" } Output: ok
ni, als de vereiste waarde in de gedefinieerde lijst wordt gevonden, wordt 0 geretourneerd, anders wordt 1 geretourneerd.
Ex :-
set a {1 2 3} if {1 ni $a} { puts "ok" } else { puts "fail" } Output: fail
TCL-stroomcontrole en besluitvorming
Er zijn verschillende commando's voor stroombesturing en besluitvorming die worden gebruikt om de stroom van een programma te wijzigen. Programma-uitvoeringen beginnen altijd vanaf de bovenkant van het bronbestand naar de onderkant.
If-instructie bestaat uit een Booleaanse expressie gevolgd door een of meer instructies.
Als... verklaring
Syntaxis:-
als expr? dan? lichaam
als expr wordt geëvalueerd als true, wordt de opdrachttekst uitgevoerd.
Ex:-
set age 10 if {$age < 20} { puts "Age is less than 20" } Output: Age is less than 20
Als...anders verklaring
Syntaxis:-
Als expressie? dan lichaam_1 anders lichaam_2
Als de expressie wordt geëvalueerd als waar, retourneert deze body_1, anders retourneert deze body_2
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
Geneste if..else-instructie
Het betekent dat een if of else..if-statement in een andere if of else..if-statement kan worden geplaatst.
Syntaxis:-
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-instructie
Met de switch-instructie kan een variabele worden getest op gelijkheid aan de hand van een lijst met waarden. Het evalueert de lijst met waarden en retourneert het resultaat van die evaluatie. Als er geen waarden overeenkomen, worden standaardwaarden geretourneerd.
Voorbeeld:
#!/usr/bin/tclsh # switch_cmd.tcl set domain x switch $domain { x { puts "x" } y { puts "y" } z { puts "z" } default { puts "unknown" } }
Geneste schakelaar
Geneste switch-instructie betekent switch-instructie binnen een switch-instructie.
Syntaxis :-
switch <switchingstring1> { <matchstring1> { body1 switch <switchingstring2> { <matchstring2> { body2 } ... switch <switchingstringN> { <matchStringN> { bodyN } } }
Voorbeeld: In het volgende voorbeeld is de waarde van a 100 en met dezelfde code schakelen we over naar een andere waarde van b, namelijk 200. De uitvoer toont de waarde voor zowel a als 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" } } } }
Uitgang: -
De waarde van a is 100
De waarde van b is 200
TCL Loop-instructie
Met een loop-statement kunt u een statement of een groep statements meerdere keren uitvoeren. Tcl biedt de volgende typen looping statements.
Terwijl commando
Wanneer een bepaalde voorwaarde waar is, wordt een instructie of een groep uitspraken herhaald die zich in de lus bevinden.
Syntaxis:
While {condition} { Statements }
Ex :-
#!/usr/bin/tclsh Set a 10 While {$a < 12} { Puts "a is $a" incr a }
Uitgang: -
a is 10
a is 11
In het bovenstaande voorbeeld wordt de ingebouwde opdracht "incr" gebruikt. Het betekent dat de waarde van 'a' met 1 wordt verhoogd tot de maximale waarde (<12).
Voor commando
Het voert meerdere keren een reeks instructies uit op basis van een tellerwaarde. Het wordt automatisch verhoogd of verlaagd tijdens elke herhaling van de lus.
Syntaxis :-
For {start} {test} {next} { Body }
Voorbeeld: In onderstaand voorbeeld wordt de waarde van 'i' ingesteld op 0 en verhoogd tot waarde <5.
#!/usr/bin/tclsh for {set i 0} {$i < 5} {incr i} { put $i }
Uitgang: -
0 1 2 3 4
Overzicht:
- TCL is een op strings gebaseerde scripttaal en ook een procedurele taal
- De taal wordt vaak gebruikt voor GUI's en testen
- In TCL is alles standaard string
- TCL is een shell-applicatie die de TCL-opdracht leest vanuit de standaardinvoer of vanuit een bestand en de gewenste resultaten oplevert.
- TCL-programma moet de extensie .tcl hebben