Tutorial TCL TK: Limbajul de comandă a instrumentului

Ce este TCL?

TCL este o aplicație shell care citește comanda TCL din intrarea sa standard sau dintr-un fișier și oferă rezultatele dorite.

TCL este un limbaj de scripting bazat pe șiruri și, de asemenea, un limbaj procedural. A fost creat pentru prima dată de John Osterhout în 1989. Scopul dezvoltării acestui limbaj este aplicațiile încorporate ușor în interior ( ). Limbajul este folosit în mod obișnuit pentru GUI și testare. De exemplu, prototiparea rapidă, Testarea interacțiunea bazei de date etc. În TCL, în mod implicit, totul este un șir.

În acest tutorial, veți învăța-

Cum se execută TCL

Există două moduri de a executa codul TCL

  1. Windows aplicația bazată este disponibilă aici fișierul tcltutor exe
  2. Aplicație bazată pe Linux

In Linux interpret interactiv, putem executa scripturile TCL ca mai jos

Pentru a accesa sesiunea interactivă TCL, executați următoarea comandă

Tutorial TCL: Limbajul de comandă a instrumentului

Scripturi TCL

Programul TCL ar trebui să aibă extensia .tcl. Fiecare script în UNIX/LINUX începe cu calea shell-ului TCL

#!/usr/bin/tclsh

Exemplu:-

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

producție: Salut Lume

În TCL, comanda „Puts” este folosită pentru a imprima mesaje pe consolă. Sintaxa puturilor este mai jos

pune?-nonewline? ?canalId? şir

  • Nonnewline: Acest parametru opțional suprimă caracterul de linie nouă prin comandă implicită. Pune o linie nouă pentru fiecare șir
  • Channelid: Acest parametru este utilizat pentru canalul de intrare standard (stdin) și canalul de ieșire standard (stdout).

Ex:-

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

Tip de înlocuire TCL

Există trei tipuri de substituții în TCL

  1. Înlocuirea comenzilor
  2. Substituție variabilă
  3. Înlocuire backslash

Să studiem unul câte unul

Înlocuirea comenzilor

Parantezele pătrate sunt folosite pentru înlocuirea comenzilor.

Exemplu:-

% puts [expr 1*3]
% 3

Aici comanda dintre paranteze drepte este evaluată mai întâi. Rezultatul este returnat .”expr” folosit pentru efectuarea calculului aritmetic.

Substituție variabilă

TCL efectuează înlocuirea variabilei cu ajutorul lui $ semn.

Exemplu:-

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

Aici creăm o variabilă numită „a” și îi setăm valoarea „10”.

  • pune a : va imprima șirul „a” dar nu și valoarea lui „a” în consolă
  • pune $a : va imprima valoarea lui 'a' pe consolă

Să executăm și să verificăm. Veți obține rezultatul ca mai jos.

$ ./substitution.tcl

a

10

Înlocuire backslash

În Tcl, bara oblică inversă este folosită pentru a scăpa de caractere speciale, precum și pentru a distribui comenzi lungi pe mai multe linii. Orice personaj care urmează imediat bara oblică inversă va rămâne fără înlocuire. În exemplul de mai jos, puteți vedea caracterul special „”, rămâne după bara oblică inversă.

Să verificăm acest lucru cu un exemplu

#!/usr/bin/tclsh

puts "This  is my  \"car\"

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

NOTĂ: -Pentru a comenta orice șir în TCL este folosit „#”. Toate caracterele de după „#” sunt ignorate de comanda tclsh shell.

Variabila TCL

O variabilă este un identificator care deține o valoare. Cu alte cuvinte, o variabilă este o referință la memoria unui computer, unde este stocată valoarea.

Variabilele sunt create prin „comandă set” și toate numele variabilelor sunt sensibile la majuscule. Înseamnă, Bună, Bună, Bună, toate sunt diferite în TCL. Uitați-vă la un exemplu de variabilă sensibilă la majuscule și minuscule.

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

Ieșire: -

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

Crearea variabilelor TCL

Pentru a crea variabile în TCL, trebuie să utilizați "a stabilit" comandă

Setează un 10

Pentru a obține valoarea variabilei, trebuie să utilizați simbolul „$” ca

% pune $a

% 10

Deci, obținem valoarea variabilei „a” ca 10.

Există informații despre comandă TCL

Comanda „set” este folosită pentru a crea și a citi variabile așa cum se arată mai sus. Comanda unset este folosită pentru a distruge o variabilă. Comanda „info exists” returnează 1 dacă varName există ca o variabilă (sau un element de matrice) în contextul curent, în caz contrar returnează 0. (vezi exemplul de mai jos).

Există diverse comenzi „info” în TCL, cum ar fi „info există”, „funcții de informații”, „informații globale” și așa mai departe. Aici vom vedea un exemplu de „informații există”.

Ex:-

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

Diferite bretele și comportamentul lor

{} -> Acolade

Acolade în TCL grupează cuvintele împreună pentru a deveni argumente. Acoladele sunt folosite pentru a defini un bloc care este amânat – cu alte cuvinte, acesta poate fi rulat DUPĂ restul comenzii de pe linia curentă. Caracterele dintre acolade sunt transmise unei comenzi exact așa cum este scrisă.

Câteva puncte de reținut

  1. Înlocuirea variabilelor nu este permisă între {} acolade
  2. A folosit pentru a crea tipul de date din listă

Exemplu:-

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

%set number {1 2 3 4 5} -> Aici numărul este un tip de date din listă

% pune $numar

%1 2 3 4 5

[] -> acolade pătrate

Parantezele pătrate sunt folosite pentru a crea o comandă imbricată. Mai simplu spus, ieșirea unei comenzi a trecut ca argument unei alte comenzi. Parantezele pătrate sunt folosite pentru a defini un bloc care se rulează ÎNAINTE de restul comenzii pe linia curentă, iar rezultatul este înlocuit în linie.

Ex: –

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

() -> bretele rotunde

Această comandă este utilizată pentru a crea tipul de date matrice și, de asemenea, pentru a indica prioritatea operatorului.

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

Aici „a” este o matrice cu valorile 10 și 20. Vedeți mai jos comenzile pentru a imprima chei, perechi valori cheie și valori ale matricei.

% 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

Pentru a imprima valoarea „N-a” a tabloului a, vom folosi Puts $a(N)

Argumente de linie de comandă TCL

Elementele de date transmise unui script din linia de comandă sunt cunoscute ca argumente. Numărul de argumente ale liniei de comandă unui script Tcl este transmis ca variabilă globală argc . Numele unui script Tcl este transmis scriptului ca variabilă globală argv0 , iar restul argumentelor liniei de comandă sunt transmise ca o listă în argv.

TCL are 3 variabile predefinite, cum ar fi

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

$argv   -> indicates list of arguments

$argv0  -> indicates the name of script

Ex:–

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

producție:-

  • Numărul de argumente transmise scripturilor: 3
  • Lista de argumente este transmisă scriptului: 10 20 30
  • Numele scriptului este: arg-script.tcl

Expresia TCL și OperaTdR

Expresia este construită din operanzi și operatori. Este evaluat cu comanda „expr”. Operatorii sunt evaluați pe baza precedenței și asociativității. Limbajul TCL are operatori încorporați ca mai jos

Operator Categoria Simbol Precedentă/Asociativitate
Aritmetică OperaTdR + - * / % De la stânga la dreapta
Relațional OperaTdR == != < > <= >= De la stânga la dreapta
Logic OperaTdR && || ! De la stânga la dreapta
bitwise OperaTdR & | ^ ~ De la stânga la dreapta
Ternar OperaTdR ?: De la dreapta la stanga
Shift OperaTdR << >> De la stânga la dreapta
Comparație de șiruri OperaTdR eq ne De la stânga la dreapta
Exponențierea OperaTdR ** De la stânga la dreapta
Listă OperaTdR În ni De la stânga la dreapta

Aritmetică OperaTdR

O expresie TCL constă dintr-o combinație de operanzi, operatori și paranteze. Să vedem un exemplu de operatori aritmetici în TCL

+ Adăugați doi sau mai mulți operanzi

Ex:-

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

- Scade doi sau mai mulți operanzi

Ex:-

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

* Înmulțiți doi sau mai mulți operanzi

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

/ Împărțiți numărător cu numărător

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

Operatorul % Modulus împarte numărătorul cu denumerator, dar returnează un memento

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

Relațional OperaTdR

Verifică dacă valoarea operandului din stânga este mai mare decât valoarea operandului din dreapta. Dacă da, atunci condiția devine adevărată și returnează 1, altfel returnează 0.

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

Verificați dacă valoarea operandului din stânga este mai mică decât valoarea operandului din dreapta. Dacă da, atunci condiția devine adevărată și returnează 1, altfel returnează 0

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

>= Verifică dacă valoarea operandului din stânga este mai mare sau egală cu valoarea operandului din dreapta, dacă da atunci condiția devine adevărată și returnează 1 în caz contrar returnează 0

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

<= Verifică dacă valoarea operandului din stânga este mai mică sau egală cu valoarea operandului din dreapta, dacă da atunci condiția devine adevărată și returnează 1 în caz contrar returnează 0

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

!= Verifică dacă valorile a doi operanzi sunt egale sau nu, dacă valorile nu sunt egale atunci condiția devine adevărată și returnează 1 altfel returnează 0

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

== Verifică dacă valorile a doi operanzi sunt egale sau nu, dacă da atunci condiția devine adevărată și returnează 1 altfel returnează 0

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

Logic OperaTdR

&& Dacă ambii operanzi sunt non-zero, atunci condiția devine adevărată și returnează 1, altfel returnează 0

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

|| Dacă oricare dintre cei doi operanzi este diferit de zero, atunci condiția devine adevărată și returnează 1, altfel returnează 0

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

! Folosit pentru a inversa rezultatul oricărei expresii. Aici, în rezultat, puteți vedea că valoarea lui „a” a devenit acum 1 din 0. În timp ce valoarea lui „b” a devenit 0 din 1.

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

bitwise OperaTdR

& (pe bit și) efectuează operațiuni bit cu bit și urmează tabelul de mai jos pentru operare.

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

Ex:-

%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 

| (pe bit sau) efectuați operațiuni bit cu bit și urmați tabelul de mai jos

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

Ex:-

%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 

^ (exclusiv pe biți sau) efectuați operațiuni bit cu bit și urmați tabelul de mai jos

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

Ex:-

%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

Operatorul ~ (negație pe biți) schimbă fiecare 1 la 0 și 0 la 1, urmați tabelul ca referință

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

Ternar Operator (?:)

Sintaxa este

condition-expression?  expression_1: expression_2

Dacă exp-condiție este adevărată, exp1 este evaluată și rezultatul este returnat. Dacă exp-ul este fals, exp2 este evaluat și rezultatul său este returnat. În exemplul nostru, exp1 este adevărată deoarece valoarea lui A este mai mare decât 6.

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

Shift OperaTdR

Shift operatorul este notat fie prin << operator de deplasare la stânga, fie cu >> operatorul de schimbare la dreapta. Pentru operatorul << deplasare la stânga, valoarea operanzilor din stânga este mutată la stânga cu numărul de biți specificat de operandul din dreapta.

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

Pentru operatorul >> deplasare la dreapta, valoarea operanzilor din stânga este mutată la dreapta cu numărul de biți specificat de operandul din dreapta.

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

Comparație de șiruri OperaTdR

Operatorul de comparare a șirurilor compară valoarea ambilor operanzi. Dacă valoarea operandului este aceeași, atunci va returna 1, în caz contrar, va returna 0. În exemplu, valoarea atât pentru A, cât și pentru B este 7, deci rezultatul returnează 1.

Ex:-

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

Ne (dacă valoarea ambilor operanzi este diferită, atunci va returna 1, altfel va returna 0)

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

Operator de exponențiere

Pow () și ** ambele sunt la fel. Returnează întotdeauna o valoare flotantă.

** indică puterea operandului dorit.

Ex:-

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

Listă OperaTdR

Dacă valoarea necesară este găsită în lista definită, returnează 1, altfel returnează 0. În exemplu, valoarea 1 există în variabila „a”, deci va returna 1.

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

nu, dacă valoarea necesară este găsită în lista definită, atunci va returna 0, altfel returnează 1.

Ex:-

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

Controlul fluxului TCL și luarea deciziilor

Există diverse comenzi de control al fluxului și de luare a deciziilor care sunt utilizate pentru a modifica fluxul unui program. Execuțiile programului încep întotdeauna din partea de sus a fișierului sursă până în jos.

Instrucțiunea If constă dintr-o expresie booleană urmată de una sau mai multe instrucțiuni.

Dacă... declarație

Sintaxă:-

dacă expr ?atunci? corp

dacă expr este evaluat la adevărat, atunci corpul comenzii este executat.

Ex:-

set age 10

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

Output: Age is less than 20

Dacă... altfel afirmație

Sintaxa:-

Dacă expresie? apoi body_1 else body_2

Dacă expresia este evaluată la adevărat, atunci va returna body_1, altfel va returna body_2

Ex:--

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

Imbricat if..else declarație

Înseamnă o declarație if sau else..if poate fi pusă în interiorul altei declarații if sau else..if.

Sintaxă:-

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

Ex:--

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

Declarație Switch

Instrucțiunea switch permite testarea unei variabile pentru egalitate cu o listă de valori. Evaluează lista de valori și returnează rezultatul acelei evaluări. Dacă nicio valoare nu se potrivește, atunci valorile implicite vor fi returnate.

Exemplu:

#!/usr/bin/tclsh

# switch_cmd.tcl

set domain x
switch $domain {

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

Comutator imbricat

Instrucțiunea switch imbricată înseamnă instrucțiunea switch în interiorul unei instrucțiuni switch.

Sintaxă :-

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

Exemplu: În exemplul următor, valoarea lui a este 100, iar cu același cod schimbăm instrucțiunea pentru o altă valoare a lui b este 200. Out va afișa valoarea atât pentru a cât și pentru 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"
        }
     }
   }   
}

Ieșire: -

Valoarea lui a este 100

Valoarea lui b este 200

Declarație TCL Loop

Instrucțiunea buclă permite executarea unei instrucțiuni sau a unui grup de instrucțiuni de mai multe ori. Tcl oferă următoarele tipuri de instrucțiuni de buclă.

În timp ce comanda

Când o anumită condiție este adevărată, se repetă o declarație sau un grup de instrucțiuni care se află în corpul buclei.

Sintaxă:

While  {condition} {
    Statements
}

Ex:-

#!/usr/bin/tclsh

Set a 10

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

Ieșire: -

a este 10

a este 11

În exemplul de mai sus, este folosită comanda încorporată „incr”. Înseamnă că valoarea lui „a” va fi mărită cu 1 până la valoarea maximă (<12).

Pentru comandă

Ea execută o secvență de instrucțiuni de mai multe ori pe baza unei valori de contor. Acesta este automat crescut sau micșorat în timpul fiecărei repetări a buclei.

Sintaxă :-

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

Exemplu: În exemplul de mai jos, valoarea lui „i” este setată la 0 și este incrementată până la valoarea <5.

#!/usr/bin/tclsh

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

Ieșire: -

0 
1 
2 
3 
4

Rezumat:

  • TCL este un limbaj de scripting bazat pe șiruri și, de asemenea, un limbaj procedural
  • Limbajul este folosit în mod obișnuit pentru GUI și testare
  • În TCL, în mod implicit, totul este șir
  • TCL este o aplicație shell care citește comanda TCL din intrarea sa standard sau dintr-un fișier și oferă rezultatele dorite.
  • Programul TCL ar trebui să aibă extensia .tcl