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-
- Hvad er TCL
- Sรฅdan udfรธres TCL
- TCL scripts
- TCL erstatningstype
- TCL Variabel
- TCL-udtryk og OperaTor
- TCL flow kontrol og beslutningstagning
Sรฅdan udfรธres TCL
Der er to mรฅder at udfรธre TCL-kode pรฅ
- Windows baseret applikation er tilgรฆngelig her tcltutor exe-fil
- 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 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
- Kommando substitution
- Variabel substitution
- 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
- Variabel substitution er ikke tilladt inden for {} klammeparenteser
- 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
