Tcl/TK-vejledning

⚡ Smart opsummering

TCL (Tool Command Language) er et strengbaseret scripting- og proceduresprog skabt af John Osterhout i 1989, der er meget brugt til GUI'er, rapid prototypingog testning, hvor hver værdi som standard behandles som en streng.

  • 🧵 TCL-defineret: Et strengbaseret scripting- og proceduresprog, hvor alt som standard er en streng.
  • ▶ ️ Udførelse: Kør Tcl-scripts via tclsh-shell'en på Windows eller Linux, med filer der bruger filtypen .tcl.
  • 🔄 Udskiftning: Understøtter kommandoer (firkantede parenteser), variable ($) og omvendt skråstregsubstitution.
  • 📦 Variabler: Oprettet med set, læst med $, fjernet med unset og kontrolleret med info exists.
  • Udtryk: Kommandoen expr evaluerer aritmetiske, relationelle, logiske, bitvise og andre operatorer.
  • 🔀 Flow kontrol: Giver if/else, switch, while og for til beslutningstagning og løkker.

TCL/TK-vejledning

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 nemt at integrere i applikationer. Sproget bruges almindeligvis til GUI'er og testning. For eksempel rapid prototyping, Test databaseinteraktion osv. I TCL er alt som standard en streng.

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 kommandoen "Puts" til at udskrive beskeder til konsollen. Syntaksen for puts er vist nedenfor.

sætter ?-nonewline? ?channelId? strengen

  • 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 de firkantede parenteser først. Resultaterne returneres. "udtryk" bruges 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, der 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 slette en variabel. Kommandoen "info exists" returnerer 1, hvis varName findes som en variabel (eller et array-element) i den aktuelle kontekst, ellers returneres 0. (se eksemplet nedenfor).

Der findes forskellige "info"-kommandoer i TCL, såsom "info exists", "info functions", "info global" osv. Her ser vi et eksempel på "info exists".

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 parenteser i TCL grupperer ord sammen for at blive til argumenter. Krøllede parenteser 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 i parenteser sendes til en kommando præcis 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. Kort sagt sendes outputtet fra én kommando 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 indsættes på 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

Udtrykket er konstrueret af 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 mod højre
Logisk OperaTor && || ! Venstre mod højre
bitvise OperaTor & | ^ ~ Venstre mod højre
Ternær OperaTor ?: Højre til venstre
Shift OperaTor << >> Venstre mod højre
Streng sammenligning OperaTor ligning ne Venstre mod højre
eksponentiering OperaTor ** Venstre mod højre
Liste OperaTor I ni Venstre mod 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 et hvilket som helst 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

En strengsammenligningsoperator sammenligner værdien af ​​begge operander. Hvis operandens værdi er den samme, returnerer den 1, ellers returneres 0. I eksemplet er værdien for både A og B 7, derfor returneres 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 nødvendige værdi findes i den definerede liste, returneres 1, ellers returneres 0. I eksemplet findes værdi 1 i variablen 'a', derfor returneres 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 … udsagn

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 … ellers erklæring

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

EksempelI det følgende eksempel er værdien af ​​a 100, og med den samme kode skifter vi sætning til en anden værdi af b, der er 200. `out` vil vise værdien 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' øges med 1 indtil den maksimale værdi (<12).

Til kommando

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

Syntaks :-

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

EksempelI eksemplet nedenfor er værdien af ​​'i' sat til 0 og øget, indtil værdien er <5.

#!/usr/bin/tclsh

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

Produktion:-

0
1
2
3
4

Ofte Stillede Spørgsmål

Ja. Tcl bruges stadig til automatisering, testning, EDA-værktøjer, scripting af netværksenheder og indlejring i applikationer. Expect-værktøjet og mange testframeworks er afhængige af Tcl, selvom det er mindre almindeligt for nye webapps.

Tcl er scriptsproget, mens Tk er dets ledsagende grafiske værktøjssæt til at bygge GUI'er. Sammen som Tcl/Tk giver de dig mulighed for at skrive cross-platform desktop-applikationer med enkle kommandoer.

Kommandoen expr evaluerer matematiske og logiske udtryk i Tcl. Fordi Tcl behandler alt som en streng, kræves expr for at udføre aritmetiske operationer, sammenligninger og boolske operationer.

AI-assistenter kan generere Tcl-kode, forklare kommandoer som set, puts og expr, konvertere pseudokode til Tcl og fejlfinde syntaksfejl.ping begyndere lærer sproget hurtigere.

Ja. AI-værktøjer kan oversætte Tcl-scripts til sprog som f.eks. Python eller Perl, kortping kommando- og kontrolstrukturer, selvom udviklere bør gennemgå outputtet for korrekthed.

Opsummer dette indlæg med: