TCL TK -opetusohjelma: Työkalun komentokieli

Mikä on TCL?

TCL on shell-sovellus, joka lukee TCL-komennon vakiosyötteestä tai tiedostosta ja antaa halutut tulokset.

TCL on merkkijonopohjainen skriptikieli ja myös proseduraalinen kieli. Sen loi ensimmäisen kerran John Osterhout vuonna 1989. Kehittämisen tarkoitusping Tämä kieli on helppo upottaa inti()-sovelluksiin. Kieltä käytetään yleisesti käyttöliittymissä ja testauksessa. Esimerkiksi nopeassa prototyypittelyssä.ping, Testaus tietokantavuorovaikutus jne. TCL:ssä oletusarvoisesti kaikki on merkkijonoa.

Tässä opetusohjelmassa opit -

Kuinka suorittaa TCL

TCL-koodin suorittamiseen on kaksi tapaa

  1. Windows pohjainen sovellus löytyy täältä tcltutor exe-tiedosto
  2. Linux-pohjainen sovellus

In Linux interaktiivinen tulkki, voimme suorittaa TCL-komentosarjat alla

Päästäksesi interaktiiviseen TCL-istuntoon, suorita seuraava komento

TCL opetusohjelma: Tool Command Language

TCL-skriptit

TCL-ohjelmalla tulee olla .tcl-tunniste. Jokainen UNIX/LINUXin komentosarja alkaa TCL-kuoren polulla

#!/usr/bin/tclsh

Esimerkki: -

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

ulostulo: Hei maailma

TCL:ssä "Puts"-komentoa käytetään viestien tulostamiseen konsoliin. Puts-syntaksi on alla

laittaa?-nonewline? ?channelId? merkkijono

  • Ei uusi rivi: Tämä valinnainen parametri estää rivinvaihdon oletuskomennon. Se asettaa rivinvaihdon jokaiseen merkkijonoon
  • Channelid: Tätä parametria käytetään vakiotulokanavalle (stdin) ja vakiolähtökanavalle (stdout).

Esim:-

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

TCL-korvaustyyppi

TCL:ssä on kolmenlaisia ​​korvauksia

  1. Komennon korvaaminen
  2. Muuttuva korvaus
  3. Kenoviivan vaihto

Opiskellaan yksi kerrallaan

Komennon korvaaminen

Hakasulkeita käytetään komentojen korvaamiseen.

Esimerkki: -

% puts [expr 1*3]
% 3

Tässä hakasulkujen välissä oleva komento arvioidaan ensin. Tulokset palautetaan aritmeettisen laskutoimituksen suorittamiseen käytettynä ”lauseena”.

Muuttuva korvaus

TCL suorittaa muuttujan korvaamisen avulla $ merkki.

Esimerkki: -

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

Täällä luomme muuttujan nimeltä "a" ja asetamme sille arvon "10".

  • laittaa a: Se tulostaa merkkijonon "a", mutta ei "a":n arvoa konsoliin
  • laittaa $a: Se tulostaa 'a':n arvon konsoliin

Suoritetaan ja tarkistetaan se. Saat tulosteen alla olevan mukaisesti.

$ ./substitution.tcl

a

10

Kenoviivan vaihto

Tcl:ssä kenoviivaa käytetään esca-merkinnän suorittamiseen.ping erikoismerkkejä sekä pitkien komentojen jakamiseen useille riveille. Mikä tahansa kenoviivaa välittömästi seuraava merkki pysyy voimassa ilman korvausta. Alla olevassa esimerkissä näet, että erikoismerkki ” ” jää kenoviivan jälkeen.

Varmistetaan tämä esimerkillä

#!/usr/bin/tclsh

puts "This  is my  \"car\"

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

HUOMAUTUS: -Kommentoimiseen käytetään mitä tahansa merkkijonoa TCL:ssä "#". Tclsh shell -komento ohittaa kaikki "#":n jälkeiset merkit.

TCL-muuttuja

Muuttuja on tunniste, joka sisältää arvon. Toisin sanoen muuttuja on viittaus tietokoneen muistiin, johon arvo on tallennettu.

Muuttujat luodaan "set-komennolla", ja kaikki muuttujien nimet ovat kirjainkoolla. Se tarkoittaa hei, hei, hei kaikki ovat erilaisia ​​TCL:ssä. Katso esimerkkiä isot ja pienet kirjaimet vaihtelevasta muuttujasta.

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

Lähtö: -

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

TCL-muuttujien luominen

Jos haluat luoda muuttujia TCL:ssä, sinun on käytettävä "aseta" komento

Aseta 10

Muuttujan arvon saamiseksi on käytettävä "$" symbolia kuten

% laittaa $a

% 10

Joten saamme muuttujan 'a' arvoksi 10.

TCL-komentotiedot ovat olemassa

"set"-komentoa käytetään muuttujien luomiseen ja lukemiseen yllä olevan kuvan mukaisesti. Unset-komentoa käytetään muuttujan tuhoamiseen. Komento "info létezik" palauttaa arvon 1, jos varName on olemassa muuttujana (tai taulukkoelementtinä) nykyisessä kontekstissa, muussa tapauksessa palauttaa arvon 0. (katso esimerkki alla).

TCL:ssä on erilaisia ​​"info"-komentoja, kuten "info olemassa", "infofunktiot", "info globaali" ja niin edelleen. Tässä näemme esimerkin "tietoa on olemassa".

Esim:-

% set a 20
% puts $a
% 20
% puts [info exists a]
% 1
% unset a
%puts [info exists a]
% 0

Erilaiset henkselit ja niiden käyttäytyminen

{} -> Kiharat henkselit

TCL:n kiharat aaltosulut ryhmittelevät sanat yhteen argumenteiksi. Aaltosulkeiden avulla määritetään lykätty lohko – toisin sanoen se voidaan suorittaa nykyisen rivin muun komennon JÄLKEEN. Aaltosulkeissa olevat merkit välitetään komennolle täsmälleen kirjoitetulla tavalla.

Muutama huomio muistettavana

  1. Muuttujien korvaaminen ei ole sallittu {} aaltosulkeissa
  2. Sitä käytettiin luettelotietotyypin luomiseen

Esimerkki: -

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

%set number {1 2 3 4 5} -> Tässä numero on luettelotietotyyppi

% laittaa $numeron

%1 2 3 4 5

[] -> hakasulkeet

Hakasulkeilla luodaan sisäkkäisiä komentoja. Yksinkertaisesti sanottuna yhden komennon tulos välitetään argumenttina toiselle komennolle. Hakasulkeilla määritetään lohko, joka suoritetaan ENNEN nykyisen rivin muuta komentoa, ja tulos korvataan rivillä.

Esim: -

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

() -> pyöreät olkaimet

Tätä komentoa käytetään taulukon tietotyypin luomiseen ja myös operaattorin ensisijaisuuden osoittamiseen.

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

Tässä "a" on taulukko, jonka arvot ovat 10 ja 20. Katso alla komennot avainten, avainarvoparien ja taulukon arvojen tulostamiseksi.

% 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

Tulostettaessa taulukon a "N:s" arvoa käytetään Puts $a(N)

TCL-komentorivin argumentit

Komentoriviltä komentosarjalle välitetyt tiedot tunnetaan argumenteina. Tcl-komentosarjan komentoriviargumenttien määrä välitetään yleisenä muuttujana arg . Tcl-komentosarjan nimi välitetään komentosarjalle globaalina muuttujana argv0 , ja loput komentorivin argumentit välitetään luettelona sisään argv.

TCL:ssä on 3 ennalta määritettyä muuttujaa, kuten

$argc   -> indicates the number of arguments passed to the script

$argv   -> indicates list of arguments

$argv0  -> indicates the name of script

Esim:-

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

ulostulo:-

  • Skripteille välitettyjen argumenttien määrä: 3
  • Argumenttien luettelo välitetään skriptille: 10 20 30
  • Skriptin nimi on: arg-script.tcl

TCL-lauseke ja OperaTor

Lauseke muodostetaan operandeista ja operaattoreista. Se arvioidaan "expr"-komennolla. Operatorit arvioidaan ensisijaisuuden ja assosiatiivisuuden perusteella. TCL-kielessä on sisäänrakennetut operaattorit, kuten alla

Operator luokkaan Symboli Ensisijaisuus/assosiaatio
Aritmeettinen OperaTor + - * / % Vasemmalta oikealle
omainen OperaTor == != < > <= >= Vasemmalta oikealle
looginen OperaTor && || ! Vasemmalta oikealle
biteittäin OperaTor & | ^ ~ Vasemmalta oikealle
Kolmiosainen OperaTor ?: Oikealta vasemmalle
Shift OperaTor << >> Vasemmalta oikealle
Merkkijonojen vertailu OperaTor eq ne Vasemmalta oikealle
Potenssiinkorotus OperaTor ** Vasemmalta oikealle
Lista OperaTor Vuonna ni Vasemmalta oikealle

Aritmeettinen OperaTor

TCL-lauseke koostuu operandien, operaattoreiden ja sulkeiden yhdistelmästä. Katsotaanpa esimerkkiä TCL:n aritmeettisista operaattoreista

+ Lisää kaksi tai useampi operandi

Esim:-

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

- Subtrackaksi tai useampia operandeja

Esim:-

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

*Kerro kaksi tai useampi operandi

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

/ Jaa osoittaja osoittajalla

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

% Modulus-operaattori jakaa osoittajan de-osoittajalla, mutta palauttaa muistutuksen

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

omainen OperaTor

Tarkistaa, onko vasemman operandin arvo suurempi kuin oikean operandin arvo. Jos kyllä, niin ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0.

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

Tarkista, onko vasemman operandin arvo pienempi kuin oikean operandin arvo. Jos kyllä, niin ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0

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

>= Tarkistaa onko vasemman operandin arvo suurempi tai yhtä suuri kuin oikean operaandin arvo, jos kyllä, niin ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0

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

<= Tarkistaa onko vasemman operandin arvo pienempi tai yhtä suuri kuin oikean operandin arvo, jos kyllä, niin ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0

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

!= Tarkistaa ovatko kahden operandin arvot samat vai eivät, jos arvot eivät ole yhtä suuret, ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0

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

== Tarkistaa ovatko kahden operandin arvot yhtä suuret vai eivät, jos kyllä ​​niin ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0

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

looginen OperaTor

&& Jos molemmat operandit eivät ole nollia, ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0

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

|| Jos jokin kahdesta operandista on muu kuin nolla, ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0

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

! Käytetään minkä tahansa lausekkeen tuloksen kääntämiseen. Tässä tulosteessa näet, että 'a':n arvo on nyt tullut 1 arvosta 0. Kun taas 'b':n arvo on tullut 0:sta 1.

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

biteittäin OperaTor

& (bittisesti ja) suorita bitti bitiltä -toiminto ja noudata alla olevaa taulukkoa.

A B A & B
0 0 0
0 1 0
1 1 1
1 0 0

Esim:-

%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 

| (bitti kerrallaan tai) suorita bitti bitiltä -toiminto ja noudata alla olevaa taulukkoa

A B A | B
0 0 0
0 1 1
1 1 1
1 0 1

Esim:-

%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 

^ (bittittäin poissulkeva tai) suorita bitti bitiltä -toiminto ja noudata alla olevaa taulukkoa

A B A^B
0 0 0
0 1 1
1 1 0
1 0 1

Esim:-

%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

~ (bittikohtainen negaatio) -operaattori muuttaa kunkin 1:stä 0:ksi ja 0:sta 1:ksi, seuraa taulukkoa viitteenä

A ~A
0 1
1 0
%set A 7
%puts [expr ~$A]
-8

Kolmiosainen Operator (?:)

Syntaksi on

condition-expression?  expression_1: expression_2

Jos ehto-exp on tosi, exp1 arvioidaan ja tulos palautetaan. Jos cond-exp on epätosi, exp2 arvioidaan ja sen tulos palautetaan. Esimerkissämme exp1 on tosi, koska A:n arvo on suurempi kuin 6.

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

Shift OperaTor

Shift operaattoria merkitään joko << vasemman siirtooperaattorilla tai >> oikealla siirtooperaattorilla. << vasemmalle siirtooperaattorille vasemman operandin arvoa siirretään vasemmalle oikean operandin määrittämän bittien lukumäärän verran.

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

>> right shift -operaattorille vasen operandiarvo siirretään oikealle oikean operandin määrittämän bittimäärän verran.

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

Merkkijonojen vertailu OperaTor

Merkkijonojen vertailuoperaattori vertaa molempien operandien arvoa. Jos operandin arvot ovat samat, se palauttaa 1 muuten palauttaa 0. Esimerkissä arvo sekä A:lle että B:lle on 7, joten tulos palauttaa 1.

Esim:-

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

Ei (jos molempien operandien arvot ovat erilaiset, se palauttaa 1 muuten palauttaa 0)

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

Eksponenttioperaattori

Pow () ja ** ovat molemmat samat. Se palauttaa aina kelluvan arvon.

** osoittaa tehon haluttuun operandiin.

Esim:-

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

Lista OperaTor

Jos vaadittu arvo löytyy määritellystä luettelosta, se palauttaa 1 else return 0. Esimerkissä arvo 1 on muuttujassa 'a', joten se palauttaa arvon 1.

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

ni, jos vaadittu arvo löytyy määritellystä luettelosta, se palauttaa 0, muuten palauttaa 1.

Esim:-

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

TCL-virtauksen ohjaus ja päätöksenteko

Ohjelman kulun muuttamiseen käytetään erilaisia ​​vuonohjaus- ja päätöksentekokomentoja. Ohjelman suoritukset alkavat aina lähdetiedoston ylhäältä alas.

Jos lauseke koostuu Boolen lausekkeesta, jota seuraa yksi tai useampi lause.

Jos ... lausunto

Syntaksi:-

jos expr ?niin? kehon

jos expr arvioidaan tosi, niin komentokappale suoritetaan.

Esim:-

set age 10

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

Output: Age is less than 20

Jos... muuten lausunto

Syntaksi :-

Jos ilmaisu ? sitten body_1 muu body_2

Jos lausekkeen arvo on tosi, se palauttaa body_1, muuten se palauttaa body_2

Esim: --

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

Sisäkkäinen if..else lauseke

Se tarkoittaa yhtä if tai else..if -lauseketta voidaan laittaa toiseen if tai else..if -lauseeseen.

Syntaksi:-

If  {expression_1} {
Body_1
If {expression_2} {
Body_2
}
}

Esim: --

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

Vaihda lausunto

Switch-käsky mahdollistaa muuttujan tasa-arvon testaamisen arvoluetteloa vastaan. Se arvioi arvoluettelon ja palauttaa arvioinnin tuloksen. Jos arvot eivät täsmää, palautetaan oletusarvot.

esimerkki:

#!/usr/bin/tclsh

# switch_cmd.tcl

set domain x
switch $domain {

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

Sisäkkäinen kytkin

Sisäkkäinen kytkinlause tarkoittaa kytkinkäskyn sisällä olevaa kytkinlausetta.

Syntaksi :-

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

esimerkki: Seuraavassa esimerkissä a:n arvo on 100, ja samalla koodilla vaihdamme käskyä toiselle b:lle arvolle 200. Out näyttää sekä a:n että b:n arvon.

#!/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"
        }
     }
   }   
}

Lähtö: -

A:n arvo on 100

B:n arvo on 200

TCL Loop -lause

Silmukkalauseke mahdollistaa lausekkeen tai lausekkeiden ryhmän suorittamisen useita kertoja. Tcl tarjoaa seuraavanlaisia ​​loo-lauseitaping lausuma.

Vaikka komento

Kun annettu ehto on tosi, lause tai lauseryhmä toistaa, jotka ovat silmukan rungossa.

Syntaksi:

While  {condition} {
    Statements
}

Esim:-

#!/usr/bin/tclsh

Set a 10

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

Lähtö: -

a on 10

a on 11

Yllä olevassa esimerkissä käytetään sisäänrakennettua komentoa "incr". Se tarkoittaa, että 'a':n arvoa kasvatetaan yhdellä maksimiarvoon (<1).

Komentoa varten

Se suorittaa lausesarjan useita kertoja laskurin arvon perusteella. Se kasvaa tai pienenee automaattisesti jokaisen silmukan toiston aikana.

Syntaksi :-

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

esimerkki: Alla olevassa esimerkissä i:n arvoksi on asetettu 0 ja sitä lisätään arvoon <5 asti.

#!/usr/bin/tclsh

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

Lähtö: -

0 
1 
2 
3 
4

Yhteenveto:

  • TCL on merkkijonopohjainen komentosarjakieli ja myös proseduurikieli
  • Kieltä käytetään yleisesti graafisissa käyttöliittymissä ja testauksessa
  • TCL:ssä oletusarvoisesti kaikki on merkkijonoa
  • TCL on shell-sovellus, joka lukee TCL-komennon vakiosyötteestä tai tiedostosta ja antaa halutut tulokset.
  • TCL-ohjelmassa tulee olla .tcl-tunniste

Tiivistä tämä viesti seuraavasti: