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 et strengbaseret scriptsprog og ogsรฅ et proceduresprog. Det blev fรธrst skabt af John Osterhout i 1989. Formรฅlet med udviklingenping Dette sprog er let at integrere i () applikationer. Sproget bruges almindeligvis til GUI'er og test. For eksempel rapid 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 escaping specialtegn samt til at sprede lange kommandoer over flere linjer. Ethvert tegn umiddelbart efter omvendt skrรฅstreg vil stรฅ uden erstatning. I eksemplet nedenfor kan du se specialtegnet " ", der stรฅr 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

- Subtracts to eller flere operander

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รฆtningen tillader udfรธrelse af en sรฆtning eller en gruppe af sรฆtninger flere gange. Tcl tilbyder fรธlgende typer af looping udmelding.

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

Opsummer dette indlรฆg med: