TCL TK Vodič: Alatni naredbeni jezik

Što je TCL?

TCL je shell aplikacija koja čita TCL naredbu sa svog standardnog ulaza ili iz datoteke i daje željene rezultate.

TCL je skriptni jezik temeljen na nizovima i proceduralni jezik. Prvi ga je stvorio John Osterhout 1989. Svrha razvoja ovog jezika je jednostavno ugrađivanje inti ( ) aplikacija. Jezik se obično koristi za GUI i testiranje. Na primjer, brza izrada prototipa, Ispitivanje interakcija baze podataka itd. U TCL-u prema zadanim postavkama sve je string.

U ovom vodiču naučit ćete-

Kako izvršiti TCL

Postoje dva načina za izvršavanje TCL koda

  1. Windows temeljena aplikacija dostupna je ovdje tcltutor exe datoteka
  2. Aplikacija temeljena na Linuxu

In Linux interaktivnog tumača, možemo izvršiti TCL skripte kao u nastavku

Za pristup TCL interaktivnoj sesiji, izvršite sljedeću naredbu

TCL vodič: naredbeni jezik alata

TCL skripte

TCL program treba imati ekstenziju .tcl. Svaka skripta u UNIX-u/LINUX-u počinje putem TCL ljuske

#!/usr/bin/tclsh

Primjer:-

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

Izlaz: Pozdrav svijete

U TCL-u, naredba “Puts” koristi se za ispis poruka na konzolu. Sintaksa puts je ispod

stavlja?-nonewline? ?channelId? niz

  • Bez novog retka: Ovaj izborni parametar potiskuje znak novog retka prema zadanoj naredbi. Stavlja novi red u svaki niz
  • Channelid: Ovaj parametar se koristi za standardni ulazni kanal (stdin) i standardni izlazni kanal (stdout).

Primjer: -

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

TCL Vrsta zamjene

Postoje tri vrste zamjena u TCL-u

  1. Zamjena naredbi
  2. Varijabilna supstitucija
  3. Zamjena obrnute kose crte

Učimo jedno po jedno

Zamjena naredbi

Uglate zagrade koriste se za zamjenu naredbi.

Primjer:-

% puts [expr 1*3]
% 3

Ovdje se prvo procjenjuje naredba između uglatih zagrada. Rezultat se vraća .”expr” koji se koristi za izvođenje aritmetičkog izračuna.

Varijabilna supstitucija

TCL izvodi zamjenu varijable uz pomoć $ znak.

Primjer:-

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

Ovdje stvaramo varijablu pod nazivom "a" i postavljamo joj vrijednost "10".

  • stavlja a : ispisat će niz "a", ali ne i vrijednost 'a' na konzolu
  • stavlja $a : ispisat će vrijednost 'a' na konzolu

Izvršimo i provjerimo. Dobit ćete izlaz kao u nastavku.

$ ./substitution.tcl

a

10

Zamjena obrnute kose crte

U Tcl-u se obrnuta kosa crta koristi za izbjegavanje posebnih znakova kao i za širenje dugih naredbi u više redaka. Svaki znak odmah iza kose crte stoji bez zamjene. U donjem primjeru možete vidjeti poseban znak ” “ koji ostaje nakon obrnute kose crte.

Potvrdimo to primjerom

#!/usr/bin/tclsh

puts "This  is my  \"car\"

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

BILJEŠKA: -Za komentiranje bilo kojeg niza u TCL-u koristi se “#”. Naredba tclsh ljuske zanemaruje sve znakove nakon “#”.

TCL varijabla

Varijabla je identifikator koji sadrži vrijednost. Drugim riječima, varijabla je referenca na memoriju računala, gdje je pohranjena vrijednost.

Varijable se kreiraju pomoću "set naredbe" i svi nazivi varijabli razlikuju velika i mala slova. To znači zdravo, zdravo, zdravo svi su različiti u TCL-u. Pogledajte neki primjer za varijablu osjetljivu na velika i mala slova.

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

Izlaz:-

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

Stvaranje TCL varijabli

Da biste stvorili varijable u TCL-u, trebate koristiti “set” naredba

Postavite 10

Da biste dobili vrijednost varijable, morate koristiti simbol "$" poput

% staviti $a

10%

Tako dobivamo vrijednost varijable 'a' kao 10.

Informacije o TCL naredbi postoje

Naredba “set” koristi se za stvaranje i čitanje varijabli kao što je prikazano gore. Naredba unset koristi se za uništavanje varijable. Naredba “info exists” vraća 1 ako varName postoji kao varijabla (ili element niza) u trenutnom kontekstu, inače vraća 0. (vidi primjer u nastavku).

Postoje razne "info" naredbe u TCL-u kao što su "info postoji", "info funkcije", "info global", i tako dalje. Ovdje ćemo vidjeti primjer "info postoji".

Primjer: -

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

Različiti aparatići za zube i njihovo ponašanje

{} -> vitičaste zagrade

Vitičaste zagrade u TCL-u grupiraju riječi kako bi postale argumenti. Vitičaste zagrade koriste se za definiranje bloka koji je odgođen – drugim riječima, može se pokrenuti NAKON ostatka naredbe u trenutnom retku. Znakovi unutar vitičastih zagrada prosljeđuju se naredbi točno onako kako su napisani.

Neke točke koje treba zapamtiti

  1. Zamjena varijable nije dopuštena unutar {} zagrada
  2. Koristio se za stvaranje vrste podataka popisa

Primjer:-

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

%set broj {1 2 3 4 5} -> Ovdje je broj vrsta podataka popisa

%stavlja $broj

%1 2 3 4 5

[] -> uglaste zagrade

Uglate zagrade koriste se za stvaranje ugniježđene naredbe. Jednostavno rečeno, izlaz jedne naredbe proslijeđen kao argument drugoj naredbi. Uglate zagrade koriste se za definiranje bloka koji se izvodi PRIJE ostatka naredbe u trenutnom retku, a rezultat se zamjenjuje u retku.

Primjer: –

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

() -> okrugle zagrade

Ova se naredba koristi za stvaranje vrste podataka niza i također ukazuje na prednost operatora.

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

Ovdje je "a" polje s vrijednostima 10 i 20. Pogledajte donje naredbe za ispis ključeva, parova ključeva vrijednosti i vrijednosti niza.

% 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

Za ispis “N-te” vrijednosti niza a koristit ćemo Puts $a(N)

Argumenti TCL naredbenog retka

Stavke podataka proslijeđene skripti iz naredbenog retka poznate su kao argumenti. Broj argumenata naredbenog retka za Tcl skriptu prosljeđuje se kao globalna varijabla argc . Ime Tcl skripte prosljeđuje se skripti kao globalna varijabla argv0 , a ostatak argumenata naredbenog retka prosljeđuje se kao popis u argv.

TCL ima 3 unaprijed definirane varijable kao što su

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

$argv   -> indicates list of arguments

$argv0  -> indicates the name of script

Primjer:–

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

izlaz:-

  • Broj argumenata proslijeđenih skripti: 3
  • Popis argumenata prosljeđuje se skripti: 10 20 30
  • Naziv skripte je: arg-script.tcl

TCL Expression i Operahumka

Izraz se sastoji od operanda i operatora. Procjenjuje se naredbom "expr". Operatorovi se ocjenjuju na temelju prvenstva i asocijativnosti. TCL jezik ima ugrađene operatore kao što je prikazano u nastavku

Operator Kategorija Simbol Precedencija/Asocijativnost
Aritmetika Operahumka + - * / % S lijeva nadesno
Relacijski Operahumka == != < > <= >= S lijeva nadesno
logičan Operahumka && || ! S lijeva nadesno
Bitno Operahumka & | ^ ~ S lijeva nadesno
Trostruki Operahumka ?: S desna na lijevo
Shift Operahumka << >> S lijeva nadesno
Usporedba nizova Operahumka eq ne S lijeva nadesno
eksponenciranje Operahumka ** S lijeva nadesno
Popis Operahumka U ni S lijeva nadesno

Aritmetika Operahumka

TCL izraz sastoji se od kombinacije operanda, operatora i zagrada. Pogledajmo primjer aritmetičkih operatora u TCL-u

+ Dodajte dva ili više operanda

Primjer: -

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

- Oduzima dva ili više operanda

Primjer: -

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

*Množenje dva ili više operanda

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

/ Podijeli brojnik brojnikom

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

% Operator modula dijeli brojnik denumeratorom, ali vraća podsjetnik

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

Relacijski Operahumka

Provjerava je li vrijednost lijevog operanda veća od vrijednosti desnog operanda. Ako da, tada uvjet postaje istinit i vraća 1 inače vraća 0.

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

Provjerite je li vrijednost lijevog operanda manja od vrijednosti desnog operanda. Ako da, tada uvjet postaje istinit i vraća 1 inače vraća 0

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

>= Provjerava je li vrijednost lijevog operanda veća ili jednaka vrijednosti desnog operanda, ako da, tada uvjet postaje istinit i vraća 1 inače vraća 0

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

<= Provjerava je li vrijednost lijevog operanda manja ili jednaka vrijednosti desnog operanda, ako da, tada uvjet postaje istinit i vraća 1 inače vraća 0

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

!= Provjerava jesu li vrijednosti dvaju operanda jednake ili ne, ako vrijednosti nisu jednake tada uvjet postaje istinit i vraća 1 inače vraća 0

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

== Provjerava jesu li vrijednosti dvaju operanda jednake ili ne, ako jesu, tada uvjet postaje istinit i vraća 1 inače vraća 0

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

logičan Operahumka

&& Ako su oba operanda različita od nule, tada uvjet postaje istinit i vraća 1 inače vraća 0

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

|| Ako bilo koji od dva operanda nije nula, tada uvjet postaje istinit i vraća 1 inače vraća 0

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

! Koristi se za poništavanje rezultata bilo kojeg izraza. Ovdje u izlazu možete vidjeti da je vrijednost 'a' sada postala 1 od 0. Dok je vrijednost 'b' postala 0 od 1.

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

Bitno Operahumka

& (po bitovima i) izvedite operaciju bit po bit i slijedite donju tablicu za rad.

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

Primjer: -

%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 

| (po bitovima ili) izvedite operaciju bit po bit i slijedite donju tablicu

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

Primjer: -

%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 

^ (bitwise exclusive or) izvodi bit po bit operaciju i slijedi donju tablicu

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

Primjer: -

%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

~ (bitno negacija) operator mijenja svaki 1 u 0 i 0 u 1, slijedite tablicu kao referencu

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

Trostruki Operator (? :)

Sintaksa je

condition-expression?  expression_1: expression_2

Ako je uvjet-exp istinit, exp1 se procjenjuje i vraća se rezultat. Ako je cond-exp netočan, exp2 se procjenjuje i vraća se njegov rezultat. U našem primjeru, exp1 je istinit jer je vrijednost A veća od 6.

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

Shift Operahumka

Shift operator se označava << operatorom lijevog pomaka ili >> desnim operatorom pomaka. Za << operator pomaka ulijevo, vrijednost lijevog operanda pomiče se ulijevo za broj bitova navedenih u desnom operandu.

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

Za operator >> desnog pomaka, vrijednost lijevog operanda pomiče se udesno za broj bitova navedenih u desnom operandu.

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

Usporedba nizova Operahumka

Operator usporedbe nizova uspoređuje vrijednost oba operanda. Ako je vrijednost operanda ista, vratit će 1 inače će vratiti 0. U primjeru vrijednost za A i B je 7, stoga rezultat vraća 1.

Primjer: -

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

Ne (ako su vrijednosti oba operanda različite tada će vratiti 1 inače vratiti 0)

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

Operator stepenovanja

Pow () i ** su oba ista. Uvijek vraća pokretnu vrijednost.

** označava snagu željenog operanda.

Primjer: -

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

Popis Operahumka

Ako je tražena vrijednost pronađena na definiranom popisu, vraća 1 inače vraća 0. U primjeru vrijednost 1 postoji u varijabli 'a' stoga će vratiti 1.

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

ni, ako je tražena vrijednost pronađena na definiranom popisu, vratit će 0 inače vratiti 1.

Primjer: -

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

TCL kontrola toka i donošenje odluka

Postoje razne naredbe za kontrolu toka i donošenje odluka koje se koriste za promjenu tijeka programa. Izvršavanje programa uvijek počinje od vrha izvorne datoteke prema dnu.

If iskaz se sastoji od Booleovog izraza nakon kojeg slijedi jedan ili više iskaza.

Ako ... izjava

Sintaksa:-

if expr ?onda? tijelo

ako se izraz procijeni na istinito, tada se tijelo naredbe izvršava.

Primjer: -

set age 10

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

Output: Age is less than 20

If ... else izjava

Sintaksa: -

Ako izraz ? zatim tijelo_1 drugo tijelo_2

Ako je izraz procijenjen kao istinit, tada će vratiti body_1 inače će vratiti body_2

Primjer:--

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

Ugniježđena izjava if..else

To znači da se jedna naredba if ili else..if može staviti unutar druge naredbe if ili else..if.

Sintaksa:-

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

Primjer:--

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

Izjava o prebacivanju

Naredba switch omogućuje testiranje jednakosti varijable u odnosu na popis vrijednosti. Procjenjuje popis vrijednosti i vraća rezultat te procjene. Ako nijedna vrijednost ne odgovara, bit će vraćene zadane vrijednosti.

Primjer:

#!/usr/bin/tclsh

# switch_cmd.tcl

set domain x
switch $domain {

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

Ugniježđeni prekidač

Ugniježđena naredba switch znači naredbu switch unutar naredbe switch.

Sintaksa :-

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

Primjer: U sljedećem primjeru vrijednost a je 100, a s istim kodom mijenjamo naredbu za drugu vrijednost b 200. Izlaz će pokazati vrijednost i za a i za 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"
        }
     }
   }   
}

Izlaz:-

Vrijednost a je 100

Vrijednost b je 200

Izjava TCL petlje

Naredba petlje omogućuje izvršavanje naredbe ili grupe naredbi više puta. Tcl pruža sljedeće vrste naredbi petlje.

Dok zapovijeda

Kada je zadani uvjet istinit, tada se izjava ili grupa izjava ponavlja koje se nalaze u tijelu petlje.

Sintaksa:

While  {condition} {
    Statements
}

Primjer: -

#!/usr/bin/tclsh

Set a 10

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

Izlaz:-

a je 10

a je 11

U gornjem primjeru koristi se ugrađena naredba "incr". To znači da će se vrijednost 'a' povećati za 1 do maksimalne vrijednosti (<12).

Za naredbu

Izvršava niz naredbi više puta na temelju vrijednosti brojača. Automatski se povećava ili smanjuje tijekom svakog ponavljanja petlje.

Sintaksa :-

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

Primjer: U donjem primjeru vrijednost 'i' postavljena je na 0 i povećava se do vrijednosti <5.

#!/usr/bin/tclsh

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

Izlaz:-

0 
1 
2 
3 
4

Sažetak:

  • TCL je skriptni jezik temeljen na nizovima i proceduralni jezik
  • Jezik se obično koristi za GUI i testiranje
  • U TCL-u prema zadanim postavkama sve je string
  • TCL je shell aplikacija koja čita TCL naredbu sa svog standardnog ulaza ili iz datoteke i daje željene rezultate.
  • TCL program treba imati ekstenziju .tcl