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-

Hoe TCL uit te voeren

Er zijn twee manieren om TCL-code uit te voeren

  1. Windows gebaseerde applicatie is hier beschikbaar tcltutor exe-bestand
  2. 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-zelfstudie: Tool Command Language

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

  1. Opdrachtvervanging
  2. Variabele vervanging
  3. 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

  1. Vervanging van variabelen is niet toegestaan ​​tussen accolades {}
  2. 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