TCL TK Tutorial: Tool Command Language

Hvad er TCL?

TCL er en shell-applikation, der læser TCL-kommandoen fra dens standardinput eller fra en fil og giver de ønskede resultater.

TCL er strengbaseret scriptsprog og også et proceduresprog. Det blev først oprettet af John Osterhout i 1989. Formålet med at udvikle dette sprog er let indlejrede inti ( ) applikationer. Sproget bruges almindeligvis til GUI'er og test. For eksempel hurtig prototyping, Test databaseinteraktion osv. I TCL er alt som standard en streng.

I denne tutorial lærer du-

Sådan udføres TCL

Der er to måder at udføre TCL-kode på

  1. Windows baseret applikation er tilgængelig her tcltutor exe-fil
  2. Linux baseret applikation

In Linux interaktiv fortolker, kan vi udføre TCL-scripts som nedenfor

For at få adgang til den interaktive TCL-session skal du udføre følgende kommando

TCL Tutorial: Tool Command Language

TCL scripts

TCL-programmet skal have en .tcl-udvidelse. Hvert script i UNIX/LINUX starter med TCL-skalstien

#!/usr/bin/tclsh

Eksempel:-

#!/usr/bin/tclsh
Puts "Hello World"
Script execution:-
$ chmod +x helloworld.tcl
$ ./helloworld.tcl

Produktion: Hej Verden

I TCL bruges "Puts"-kommandoen til at udskrive beskeder til konsollen. Syntaksen af ​​puts er nedenfor

sætter?-nonewline? ?kanal-id? snor

  • Ingen ny linje: Denne valgfri parameter undertrykker nylinjetegnet som standardkommando. Den sætter en ny linje til hver streng
  • Channelid: Denne parameter bruges til standardindgangskanal (stdin) og standardudgangskanal (stdout).

Eks:-

%puts "Hello World"
% Hello World
%puts stdout  "Hello World"
% Hello World

TCL erstatningstype

Der er tre slags substitutioner i TCL

  1. Kommando substitution
  2. Variabel substitution
  3. Omvendt skråstreg udskiftning

Lad os studere en efter en

Kommando substitution

Firkantede parenteser bruges til kommandoerstatning.

Eksempel:-

% puts [expr 1*3]
% 3

Her evalueres kommandoen mellem firkantede parenteser først. Resultaterne returneres "udtr" brugt til at udføre den aritmetiske beregning.

Variabel substitution

TCL udfører variabel substitution ved hjælp af $ skilt.

Eksempel:-

#!/usr/bin/tclsh
set  a  10
puts  a
puts  $a 

Her opretter vi en variabel kaldet "a" og sætter værdien "10" til den.

  • sætter et : Det vil udskrive streng "a", men ikke værdien af ​​'a' til konsollen
  • sætter $a : Det vil udskrive værdien af ​​'a' til konsollen

Lad os udføre og verificere det. Du får output som nedenfor.

$ ./substitution.tcl

a

10

Omvendt skråstreg udskiftning

I Tcl bruges omvendt skråstreg til at undslippe specialtegn samt til at sprede lange kommandoer over flere linjer. Ethvert tegn umiddelbart efter omvendt skråstreg vil stå uden udskiftning. I eksemplet nedenfor kan du se specialtegn " ", forbliver efter omvendt skråstreg.

Lad os bekræfte dette med et eksempel

#!/usr/bin/tclsh

puts "This  is my  \"car\"

$ ./backslashsubstitution.tcl
This is my "car"

BEMÆRK: -For at kommentere en hvilken som helst streng i TCL bruges "#". Alle tegn efter "#" ignoreres af tclsh shell-kommandoen.

TCL Variabel

En variabel er en identifikator, som indeholder en værdi. Med andre ord er en variabel en reference til en computerhukommelse, hvor værdien er gemt.

Variabler oprettes ved "set kommando", og alle variabelnavne skelner mellem store og små bogstaver. Det betyder hej, hej, HEJ alle er forskellige i TCL. Se nogle eksempler for store og små bogstaver.

% set  name  Techoit
% set  Name  Technoit_1
% set  NAME  Technoit_2

Produktion:-

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

Oprettelse af TCL-variabler

For at oprette variabler i TCL skal du bruge "sæt" kommando

Sæt en 10

For at opnå værdien af ​​variabel skal du bruge "$" symbol som

% satte $a

% 10

Så vi får værdien af ​​variabel 'a' som 10.

TCL Command Info findes

Kommandoen "set" bruges til at oprette og læse variabler som vist ovenfor. Kommandoen unset bruges til at ødelægge en variabel. Kommandoen "info exists" returnerer 1, hvis varName eksisterer som en variabel (eller et matrixelement) i den aktuelle kontekst, ellers returnerer 0. (se eksempel nedenfor).

Der er forskellige "info" kommandoer i TCL som "info eksisterer", "info funktioner", "info global" og så videre. Her vil vi se et eksempel på "info eksisterer".

Eks:-

% set a 20
% puts $a
% 20
% puts [info exists a]
% 1
% unset a
%puts [info exists a]
% 0

Forskellige seler og deres adfærd

{} -> Krøllede seler

Krøllede klammeparenteser i TCL grupperer ord sammen for at blive argumenter. Krøllede klammeparenteser bruges til at definere en blok, der er udskudt – med andre ord kan den køres EFTER resten af ​​kommandoen på den aktuelle linje. Tegn inden for klammeparenteser videregives til en kommando nøjagtigt som skrevet.

Nogle punkter at huske

  1. Variabel substitution er ikke tilladt inden for {} klammeparenteser
  2. Det bruges til at oprette listedatatype

Eksempel:-

% set x 10
% puts {$x}
% $x

%sæt nummer {1 2 3 4 5} -> Her er nummeret en listedatatype

% sætter $nummer

%1 2 3 4 5

[] -> firkantede klammeparenteser

Firkantede parenteser bruges til at oprette indlejrede kommandoer. Enkelt sagt, output af en kommando overført som argument til en anden kommando. Firkantede parenteser bruges til at definere en blok, der køres FØR resten af ​​kommandoen på den aktuelle linje, og resultatet erstattes af linjen.

Eks: –

% set x 10
% puts "y : [set y [set x 10]]"
%y : 10
% puts "x : $x"
%x : 10

() -> runde seler

Denne kommando bruges til at oprette array-datatype og også angive operatørprioritet.

% set a(1) 10
% set a(2) 20

Her er "a" et array med værdi 10 og 20. Se nedenfor kommandoer til at udskrive nøgler, nøgleværdipar og værdier for array.

% 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

For at udskrive "N'te" værdi af array a, vil vi bruge Puts $a(N)

TCL Kommandolinjeargumenter

Elementer med data, der sendes til et script fra kommandolinjen, er kendt som argumenter. Antallet af kommandolinjeargumenter til et Tcl-script sendes som den globale variabel argc . Navnet på et Tcl-script sendes til scriptet som den globale variabel argv0 , og resten af ​​kommandolinjeargumenterne sendes som en liste i argv.

TCL har 3 foruddefinerede variabler som f.eks

$argc   -> indicates the number of arguments passed to the script

$argv   -> indicates list of arguments

$argv0  -> indicates the name of script

eks:-

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

output:-

  • Antal argumenter sendt til scripts: 3
  • Liste over argumenter sendes til scriptet: 10 20 30
  • Navnet på scriptet er: arg-script.tcl

TCL-udtryk og OperaTor

Udtryk er konstrueret ud fra operander og operatorer. Det evalueres med kommandoen "expr". Operators vurderes ud fra forrang og associativitet. TCL-sproget har indbyggede operatører som nedenfor

Operator kategori Symbol Forrang/Associativitet
Aritmetik OperaTor + - * / % Venstre mod højre
Relationel OperaTor == != < > <= >= Venstre til højre
Logisk OperaTor && || ! Venstre til højre
bitvise OperaTor & | ^ ~ Venstre til højre
Ternær OperaTor ?: Højre til venstre
Shift OperaTor << >> Venstre til højre
Streng sammenligning OperaTor eq ne Venstre til højre
eksponentiering OperaTor ** Venstre til højre
Liste OperaTor I ni Venstre til højre

Aritmetik OperaTor

Et TCL-udtryk består af en kombination af operander, operatorer og parenteser. Lad os se eksempler på aritmetiske operatorer i TCL

+ Tilføj to eller flere operander

Eks:-

%set a 10 
%set b 20
%puts [expr $a + $b]
30

- Trækker to eller flere operander fra

Eks:-

%set a 20 
%set b 10
%puts [expr $a - $b]
10

* Multiplicer to eller flere operander

%set a 20 
%set b 10
%puts [expr $a * $b]
200

/ Divider tæller med tæller

%set a 20 
%set b 10
%puts [expr $a / $b]
2

% Modulus operator deler tæller med tæller, men returnerer påmindelse

%set a 20 
%set b 10
%puts [expr $a % $b]
0

Relationel OperaTor

Kontrollerer, om værdien af ​​venstre operand er større end værdien af ​​højre operand. Hvis ja, bliver betingelsen sand og returnerer 1 ellers returnerer 0.

%set a 20 
%set b 10
%puts [expr $a > $b]
1

Tjek, om værdien af ​​venstre operand er mindre end værdien af ​​højre operand. Hvis ja, bliver betingelsen sand og returnerer 1 ellers returnerer 0

%set a 10 
%set b 20
%puts [expr $a < $b]
1

>= Kontrollerer, om værdien af ​​venstre operand er større end eller lig med værdien af ​​højre operand, hvis ja, bliver betingelsen sand og returnerer 1 ellers returnerer 0

%set a 20 
%set b 10
%puts [expr $a >= $b]
1

<= Kontrollerer, om værdien af ​​venstre operand er mindre end eller lig med værdien af ​​højre operand, hvis ja, bliver betingelsen sand og returnerer 1 ellers returnerer 0

%set a 20 
%set b 10
%puts [expr $a <= $b]
0

!= Kontrollerer om værdierne af to operander er ens eller ej, hvis værdierne ikke er ens, bliver betingelsen sand og returnerer 1 ellers returnerer 0

%set a 20 
%set b 10
%puts [expr $a != $b]
1

== Kontrollerer om værdierne af to operander er ens eller ej, hvis ja, bliver betingelsen sand og returnerer 1 ellers returnerer 0

%set a 20 
%set b 10
%puts [expr $a == $b]
0

Logisk OperaTor

&& Hvis begge operanderne er ikke-nul, bliver betingelsen sand og returnerer 1 ellers returnerer 0

%set a 20 
%set b 10
%puts [expr $a && $b]
1

|| Hvis en af ​​de to operander er ikke-nul, bliver betingelsen sand og returnerer 1 ellers returnerer 0

%set a 0 
%set b 10
%puts [expr $a || $b]
1

! Bruges til at vende resultatet af ethvert udtryk. Her i outputtet kan du se, at værdien af ​​'a' nu er blevet 1 fra 0. Mens værdien af ​​'b' er blevet 0 fra 1.

%set a 0 
%set b 1
%puts [expr !$a]
1
%puts [expr !$b]
0

bitvise OperaTor

& (bitvis og) udfør bit for bit operation og følg nedenstående tabel for operation.

A B A & B
0 0 0
0 1 0
1 1 1
1 0 0

Eks:-

%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 

| (bitvis eller) udfør bit for bit operation og følg nedenstående tabel

A B A | B
0 0 0
0 1 1
1 1 1
1 0 1

Eks:-

%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 

^ (bitvis eksklusiv eller) udfør bit for bit operation og følg nedenstående tabel

A B A ^ B
0 0 0
0 1 1
1 1 0
1 0 1

Eks:-

%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

~ (bitvis negation) operatoren ændrer hver 1 til 0 og 0 til 1, følg tabellen som reference

A ~A
0 1
1 0
%set A 7
%puts [expr ~$A]
-8

Ternær Operator (?:)

Syntaks er

condition-expression?  expression_1: expression_2

Hvis condition-exp er sandt, evalueres exp1, og resultatet returneres. Hvis cond-exp er falsk, evalueres exp2, og resultatet returneres. I vores eksempel er exp1 sand, da værdien af ​​A er større end 6.

%set A 7
%set result [expr $A > 6 ? true : false]
%puts $result
true

Shift OperaTor

Shift operatør er angivet med enten << venstre skift operatør eller med >> højre skift operatør. For << venstre skiftoperator flyttes værdien for venstre operander til venstre med det antal bit, der er angivet af den højre operand.

%set A 7
%set result [expr $A << 2]
%puts $result

For højreskiftoperatoren >> flyttes værdien for venstre operander til højre med det antal bit, der er angivet af den højre operand.

%set A 7
%set result [expr $A >> 2]
%puts $result

Streng sammenligning OperaTor

Strengsammenligningsoperator sammenligner værdien af ​​begge operander. Hvis værdien af ​​operanden er den samme, vil den returnere 1 ellers returnere 0. I eksempel er værdien for både A og B 7, derfor returnerer resultatet 1.

Eks:-

%set A 7 
%set B 7
%set result [expr $A eq $B]
%puts $result
1

Ne (hvis værdien af ​​begge operander er forskellig, vil den returnere 1 ellers returnere 0)

%set A 7 
%set B 8
%set result [expr $A ne $B]
%puts $result
1

Eksponentieringsoperator

Pow () og ** er begge ens. Det returnerer altid flydende værdi.

** angiver strømmen til den ønskede operand.

Eks:-

%set A 7
%set result [expr $A ** 2]
%puts $result
49

Liste OperaTor

Hvis den påkrævede værdi findes i den definerede liste, returnerer den 1 ellers returnerer 0. I eksemplet eksisterer værdi 1 i variabel 'a' og returnerer derfor 1.

set a {1 2 3}
if {1 in $a} {
puts "ok"
} else {
puts "fail"
}
Output: ok

ni, hvis den krævede værdi findes i den definerede liste, vil den returnere 0 ellers returnere 1.

eks:-

set a {1 2 3}
if {1 ni $a} {
puts "ok"
} else {
puts "fail"
}
Output: fail

TCL flow kontrol og beslutningstagning

Der er forskellige flowkontrol- og beslutningskommandoer, som bruges til at ændre flowet i et program. Programkørsel starter altid fra toppen af ​​kildefilen til bunden.

Hvis udsagn består af boolesk udtryk efterfulgt af et eller flere udsagn.

Hvis ... erklæring

Syntaks:-

hvis expr ?så? legeme

hvis expr vurderes til sand, udføres kommandoteksten.

Eks:-

set age 10

if {$age < 20} {
puts "Age is less than 20"
}

Output: Age is less than 20

Hvis ... andet udsagn

Syntaks:-

Hvis udtryk? derefter body_1 else body_2

Hvis udtryk vurderes til sand, vil det returnere body_1 ellers returnere body_2

Eks:--

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

Indlejret if..else erklæring

Det betyder en if or else..if-udsagn kan sættes i en anden if eller else..if-udsagn.

Syntaks:-

If  {expression_1} {
Body_1
If {expression_2} {
Body_2
}
}

Eks:--

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

Skift erklæring

Switch-sætningen gør det muligt at teste en variabel for lighed i forhold til en liste af værdier. Den evaluerer listen over værdier og returnerer resultatet af denne evaluering. Hvis ingen værdier matcher, returneres standardværdier.

Eksempel:

#!/usr/bin/tclsh

# switch_cmd.tcl

set domain x
switch $domain {

    x { puts "x" }
    y { puts "y" }
    z { puts "z" }
    default { puts "unknown" }
}

Indlejret kontakt

Indlejret switch-sætning betyder switch-sætning inde i en switch-sætning.

Syntaks :-

switch <switchingstring1> {
   <matchstring1> {
      body1
      switch <switchingstring2> {
        <matchstring2> {
           body2
         }
          ...
    switch <switchingstringN> {
          <matchStringN> {
           bodyN
         }
      }
   }

Eksempel: I det følgende eksempel er værdien af ​​a 100, og med den samme kode skifter vi udsagn for en anden værdi af b er 200. Out vil vise værdi for både a og 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"
        }
     }
   }   
}

Produktion:-

Værdien af ​​a er 100

Værdien af ​​b er 200

TCL Loop-erklæring

Loop-sætning gør det muligt at udføre en sætning eller gruppe af sætninger flere gange. Tcl giver følgende typer looping-sætninger.

Mens kommando

Når en given betingelse er sand, gentages et udsagn eller en gruppe af udsagn, som er i løkkelegemet.

Syntaks:

While  {condition} {
    Statements
}

eks:-

#!/usr/bin/tclsh

Set a 10

While {$a < 12} {
    Puts "a is $a"
    incr a
}

Produktion:-

a er 10

a er 11

I ovenstående eksempel bruges den indbyggede kommando "incr". Det betyder, at værdien af ​​'a' vil blive øget med 1 indtil den maksimale værdi (<12).

Til kommando

Den udfører en sekvens af udsagn flere gange baseret på en tællerværdi. Den øges eller formindskes automatisk under hver gentagelse af løkken.

Syntaks :-

For {start} {test} {next} {
Body
}

Eksempel: I eksemplet nedenfor er værdien af ​​'i' sat til 0 og øget til værdien <5.

#!/usr/bin/tclsh

for {set i 0} {$i < 5} {incr i} {
put $i
}

Produktion:-

0 
1 
2 
3 
4

Sammendrag:

  • TCL er strengbaseret scriptsprog og også et proceduresprog
  • Sproget bruges almindeligvis til GUI'er og test
  • I TCL er alt som standard streng
  • TCL er en shell-applikation, der læser TCL-kommandoen fra dens standardinput eller fra en fil og giver de ønskede resultater.
  • TCL-programmet skal have .tcl-udvidelsen