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-
- 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 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
- 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
- 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