TCL TK-veiledning: Verktøykommandospråk

Hva er TCL?

TCL er et skallprogram som leser TCL-kommandoen fra standardinndata eller fra en fil og gir ønskede resultater.

TCL er strengbasert skriptspråk og også et prosedyrespråk. Det ble først opprettet av John Osterhout i 1989. Formålet med å utvikle dette språket er enkle innebygde inti ( )-applikasjoner. Språket brukes ofte til GUIer og testing. For eksempel rask prototyping, Testing databaseinteraksjon osv. I TCL er alt som standard en streng.

I denne opplæringen vil du lære-

Hvordan utføre TCL

Det er to måter å utføre TCL-kode på

  1. Windows basert applikasjon er tilgjengelig her tcltutor exe-fil
  2. Linux-basert applikasjon

In Linux interaktiv tolk, kan vi kjøre TCL-skriptene som nedenfor

For å få tilgang til TCL interaktiv sesjon, utfør følgende kommando

TCL-veiledning: Verktøykommandospråk

TCL-skript

TCL-programmet bør ha en .tcl-utvidelse. Hvert skript i UNIX/LINUX starter med TCL-skallbanen

#!/usr/bin/tclsh

Eksempel:-

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

Produksjon: Hei Verden

I TCL brukes "Puts"-kommandoen til å skrive ut meldinger til konsollen. Syntax of puts er under

setter?-nonewline? ?kanal-ID? streng

  • Ingen ny linje: Denne valgfrie parameteren undertrykker nylinjetegnet som standardkommando. Den setter en ny linje til hver streng
  • Channelid: Denne parameteren brukes for standard inngangskanal (stdin) og standard utgangskanal (stdout).

Eks:-

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

TCL-erstatningstype

Det er tre typer erstatninger i TCL

  1. Kommandoerstatning
  2. Variabel substitusjon
  3. Bytte med skråstrek

La oss studere en etter en

Kommandoerstatning

Firkantede parenteser brukes for kommandoerstatning.

Eksempel:-

% puts [expr 1*3]
% 3

Her blir kommandoen mellom hakeparentesene evaluert først. Resultatene returneres "uttr" brukt for å utføre den aritmetiske beregningen.

Variabel substitusjon

TCL utfører variabel substitusjon ved hjelp av $ skilt.

Eksempel:-

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

Her lager vi en variabel kalt "a" og setter verdien "10" til den.

  • setter en : Den vil skrive ut streng "a", men ikke verdien av 'a' til konsollen
  • setter $a : Den vil skrive ut verdien av 'a' til konsollen

La oss utføre og verifisere det. Du vil få utgangen som nedenfor.

$ ./substitution.tcl

a

10

Bytte med skråstrek

I Tcl brukes omvendt skråstrek for å unnslippe spesialtegn samt for å spre lange kommandoer over flere linjer. Ethvert tegn umiddelbart etter omvendt skråstrek vil stå uten erstatning. I eksemplet nedenfor kan du se spesialtegnet " ", forblir etter omvendt skråstrek.

La oss bekrefte dette med et eksempel

#!/usr/bin/tclsh

puts "This  is my  \"car\"

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

MERK: -For å kommentere en hvilken som helst streng i TCL brukes "#". Alle tegn etter "#" ignoreres av tclsh shell-kommandoen.

TCL-variabel

En variabel er en identifikator som har en verdi. En variabel er med andre ord en referanse til et datamaskinminne, hvor verdien er lagret.

Variabler lages av "sett kommando" og alle variabelnavn skiller mellom store og små bokstaver. Det betyr hei, hei, hallo alle er forskjellige i TCL. Se på noen eksempler for store og små bokstaver.

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

Produksjon:-

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

Opprette TCL-variabler

For å lage variabler i TCL må du bruke "sett" kommando

Sett en 10

For å få verdien av variabel må du bruke "$" symbol som

% satte $a

% 10

Så vi får verdien av variabel 'a' som 10.

TCL-kommandoinformasjon finnes

"Set"-kommandoen brukes til å lage og lese variabler som vist ovenfor. Unset-kommandoen brukes til å ødelegge en variabel. Kommandoen "info exists" returnerer 1 hvis varName eksisterer som en variabel (eller et matriseelement) i gjeldende kontekst, ellers returnerer 0. (se eksempel nedenfor).

Det er forskjellige "info"-kommandoer i TCL som "info eksisterer", "infofunksjoner", "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

Ulike tannregulering og deres oppførsel

{} -> Krøllete seler

Krøllete klammeparenteser i TCL grupperer ord sammen for å bli argumenter. Krøllete klammeparenteser brukes til å definere en blokk som er utsatt – med andre ord kan den kjøres ETTER resten av kommandoen på gjeldende linje. Tegn innenfor klammeparenteser sendes til en kommando nøyaktig som skrevet.

Noen punkter å huske

  1. Variabelsubstitusjon er ikke tillatt innenfor {} klammeparenteser
  2. Den pleide å lage listedatatype

Eksempel:-

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

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

% setter $nummer

%1 2 3 4 5

[] -> firkantede klammeparenteser

Firkantede parenteser brukes til å lage nestede kommandoer. Enkelt sagt, utdata fra en kommando ble sendt som argument til en annen kommando. Firkantede parenteser brukes til å definere en blokk som kjøres FØR resten av kommandoen på gjeldende linje, og resultatet erstattes i linjen.

Eks: –

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

() -> runde seler

Denne kommandoen brukes til å lage matrisedatatype og også indikere operatørprioritet.

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

Her er "a" en matrise med verdi 10 og 20. Se kommandoene nedenfor for å skrive ut nøkler, nøkkelverdipar og verdier for matrise.

% 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 utskrift av "Nth"-verdi av matrise a, vil vi bruke Puts $a(N)

TCL Kommandolinjeargumenter

Dataelementer som sendes til et skript fra kommandolinjen er kjent som argumenter. Antall kommandolinjeargumenter til et Tcl-skript sendes som den globale variabelen argc . Navnet på et Tcl-skript sendes til skriptet som den globale variabelen argv0 , og resten av kommandolinjeargumentene sendes som en liste i argv.

TCL har 3 forhåndsdefinerte 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

produksjon:-

  • Antall argumenter sendt til skriptene: 3
  • Liste over argumenter sendes til skriptet: 10 20 30
  • Navnet på skriptet er: arg-script.tcl

TCL-uttrykk og Operator

Uttrykket er konstruert fra operander og operatorer. Det evalueres med kommandoen "expr". Operators blir evaluert basert på forrang og assosiativitet. TCL-språket har innebygde operatører som nedenfor

Operator-kategori symbol Forrang/assosiativitet
Aritmetisk Operator + - * / % Venstre til høyre
Relasjonelt Operator == != < > <= >= Venstre til Høyre
logisk Operator && || ! Venstre til Høyre
bitvis Operator & | ^ ~ Venstre til Høyre
Ternær Operator ?: Høyre til venstre
Shift Operator << >> Venstre til Høyre
Strengesammenligning Operator eq ne Venstre til Høyre
Potens Operator ** Venstre til Høyre
Liste Operator I ni Venstre til Høyre

Aritmetisk Operator

Et TCL-uttrykk består av en kombinasjon av operander, operatorer og parenteser. La oss se eksempler på aritmetiske operatorer i TCL

+ Legg til to eller flere operander

Eks:-

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

- Trekker fra to eller flere operander

Eks:-

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

*Multipiser to eller flere operander

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

/ Del teller med teller

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

% Modulus-operatør deler teller med teller, men returnerer påminnelse

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

Relasjonelt Operator

Sjekker om verdien av venstre operand er større enn verdien til høyre operand. Hvis ja, blir betingelsen sann og returner 1 ellers returnerer 0.

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

Sjekk om verdien av venstre operand er mindre enn verdien til høyre operand. Hvis ja, blir betingelsen sann og returner 1 ellers returnerer 0

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

>= Sjekker om verdien av venstre operand er større enn eller lik verdien av høyre operand, hvis ja, blir betingelsen sann og returnerer 1 ellers returnerer 0

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

<= Sjekker om verdien av venstre operand er mindre enn eller lik verdien av høyre operand, hvis ja, blir betingelsen sann og returnerer 1 ellers returner 0

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

!= Sjekker om verdiene til to operander er like eller ikke, hvis verdiene ikke er like blir betingelsen sann og returnerer 1 ellers returnerer 0

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

== Sjekker om verdiene til to operander er like eller ikke, hvis ja, blir betingelsen sann og returnerer 1 ellers returnerer 0

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

logisk Operator

&& Hvis begge operandene ikke er null, blir betingelsen sann og returnerer 1 ellers returnerer 0

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

|| Hvis noen av de to operandene ikke er null, blir betingelsen sann og returnerer 1 ellers returnerer 0

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

! Brukes til å reversere resultatet av ethvert uttrykk. Her i utgangen kan du se verdien av 'a' har nå blitt 1 fra 0. Mens verdien av 'b' har blitt 0 fra 1.

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

bitvis Operator

& (bitvis og) utfør bit for bit operasjon og følg tabellen nedenfor for operasjon.

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) utfør bit for bit operasjon og følg tabellen nedenfor

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) utfør bit for bit operasjon og følg tabellen nedenfor

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 negasjon) operator endrer hver 1 til 0 og 0 til 1, følg tabellen som referanse

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 sant, blir exp1 evaluert og resultatet returnert. Hvis cond-exp er falsk, blir exp2 evaluert og resultatet returnert. I vårt eksempel er exp1 sann ettersom verdien av A er større enn 6.

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

Shift Operator

Shift operatør er betegnet med enten << venstre skift operatør, eller med >> høyre skift operatør. For << venstreskiftoperator flyttes verdien for venstre operander til venstre med antall biter spesifisert av høyre operand.

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

For operatøren >> høyre skift flyttes verdien for venstre operander til høyre med antall biter spesifisert av høyre operand.

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

Strengesammenligning Operator

Operator for strengsammenligning sammenligner verdien av begge operandene. Hvis verdien av operanden er den samme, vil den returnere 1 ellers returnere 0. I eksempelet er verdien for både A og B 7, derfor gir resultatet 1.

Eks:-

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

Ne (hvis verdien av begge operandene er forskjellige, 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 like. Den returnerer alltid flytende verdi.

** indikerer kraften til ønsket operand.

Eks:-

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

Liste Operator

Hvis den påkrevde verdien finnes i den definerte listen, returnerer den 1 ellers returnerer 0. I eksempelet eksisterer verdi 1 i variabel 'a' og vil derfor returnere 1.

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

ni, hvis den nødvendige verdien finnes i den definerte listen, 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 flytkontroll og beslutningstaking

Det er forskjellige flytkontroll- og beslutningskommandoer som brukes til å endre flyten til et program. Programkjøring starter alltid fra toppen av kildefilen til bunnen.

If-setning består av boolsk uttrykk etterfulgt av ett eller flere utsagn.

Hvis ... uttalelse

Syntaks:-

hvis expr? da? kropp

hvis expr evalueres til sant, utføres kommandoteksten.

Eks:-

set age 10

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

Output: Age is less than 20

Hvis ... annet utsagn

Syntaks:-

Hvis uttrykk? deretter body_1 else body_2

Hvis uttrykket evalueres til sant, 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

Nested if..else-uttalelse

Det betyr en if or else..if-setning kan settes inn i en annen if or else..if-setninger.

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

Bytt uttalelse

Switch-setningen gjør det mulig å teste en variabel for likhet mot en liste med verdier. Den evaluerer listen over verdier og returnerer resultatet av den evalueringen. Hvis ingen verdier samsvarer, vil standardverdiene bli returnert.

Eksempel:

#!/usr/bin/tclsh

# switch_cmd.tcl

set domain x
switch $domain {

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

Nestet bryter

Nested switch statement betyr switch statement inne i en switch statement.

syntax :-

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

Eksempel: I det følgende eksempelet er verdien av a 100, og med den samme koden bytter vi utsagn for en annen verdi av b er 200. Uten vil vise verdi 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"
        }
     }
   }   
}

Produksjon:-

Verdien av a er 100

Verdien av b er 200

TCL Loop-uttalelse

Loop-setning gjør det mulig å utføre en setning eller gruppe med setninger flere ganger. Tcl gir følgende typer looping-setninger.

Mens kommando

Når en gitt betingelse er sann, gjentas et utsagn eller en gruppe av utsagn som er i løkken.

syntax:

While  {condition} {
    Statements
}

Eks:-

#!/usr/bin/tclsh

Set a 10

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

Produksjon:-

a er 10

a er 11

I eksemplet ovenfor brukes den innebygde kommandoen "incr". Det betyr at verdien av 'a' vil økes med 1 til maksimumsverdien (<12).

For kommando

Den utfører en sekvens av utsagn flere ganger basert på en tellerverdi. Den økes eller reduseres automatisk under hver repetisjon av løkken.

syntax :-

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

Eksempel: I eksemplet nedenfor er verdien av 'i' satt til 0 og øket til verdien <5.

#!/usr/bin/tclsh

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

Produksjon:-

0 
1 
2 
3 
4

Sammendrag:

  • TCL er strengbasert skriptspråk og også et prosedyrespråk
  • Språket brukes ofte til GUIer og testing
  • I TCL er alt streng
  • TCL er et skallprogram som leser TCL-kommandoen fra standardinndata eller fra en fil og gir ønskede resultater.
  • TCL-programmet bør ha .tcl-utvidelsen