Tutorial Tcl/Tk

⚡ Rezumat inteligent

TCL (Tool Command Language) este un limbaj de scripting și procedural bazat pe șiruri de caractere, creat de John Osterhout în 1989, utilizat pe scară largă pentru interfețe grafice (GUI), prototipare rapidă.pingși testarea, unde fiecare valoare este tratată în mod implicit ca un șir de caractere.

  • 🧵 TCL definit: Un limbaj de scriptare și procedural bazat pe șiruri de caractere, în care totul este implicit un șir de caractere.
  • ▶ ️ Executie: Execută scripturi Tcl prin intermediul shell-ului tclsh pe Windows sau Linux, cu fișiere care utilizează extensia .tcl.
  • 🔄 Substituţie: Acceptă înlocuirea comenzilor (paranteze pătrate), variabilelor ($) și a barei oblice inversate.
  • 📦 Variabile: Creat cu set, citit cu $, eliminat cu unset și verificat cu info exists.
  • Expresii: Comanda expr evaluează operatori aritmetici, relaționali, logici, bit-bit și alți operatori.
  • 🔀 Controlul debitului: Oferă instrucțiuni if/else, switch, while și for pentru luarea deciziilor și pentru bucle.

Tutorial TCL/Tk

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 de caractere și, de asemenea, un limbaj procedural. A fost creat pentru prima dată de John Osterhout în 1989. Scopul dezvoltării...ping Acest limbaj este ușor de integrat în aplicații. Limbajul este frecvent utilizat pentru interfețe grafice și testare. De exemplu, prototipare rapidăping, Testarea interacțiunea bazei de date etc. În TCL, în mod implicit, totul este un șir.

Cum se execută TCL

Există două moduri de a executa cod 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 utilizată pentru a afișa mesaje în consolă. Sintaxa comenzii „puts” este următoarea:

pune un șir de caractere ?-nonewline? ?channelId?

  • 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 este evaluată mai întâi comanda dintre paranteze pătrate. Rezultatele sunt returnate. „expr” este utilizată 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ă inversată este folosită pentru escaping caractere speciale, precum și pentru distribuirea comenzilor lungi pe mai multe linii. Orice caracter care urmează imediat după bara oblică inversată va rămâne fără înlocuire. În exemplul de mai jos, puteți vedea caracterul special „ “, care rămâne după bara oblică inversată.

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 conț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 utilizată pentru a crea și citi variabile, așa cum se arată mai sus. Comanda unset este utilizată pentru a distruge o variabilă. Comanda „info exists” returnează 1 dacă varName există ca variabilă (sau element de matrice) în contextul curent, altfel returnează 0. (vezi exemplul de mai jos).

Există diverse comenzi „info” în TCL, cum ar fi „info exists”, „info functions”, „info global” și așa mai departe. Aici vom vedea un exemplu de „info exists”.

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

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

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 comenzi imbricate. Mai simplu spus, ieșirea unei comenzi este transmisă ca argument către o altă comandă. Parantezele pătrate sunt folosite pentru a defini un bloc care se execută ÎNAINTE de restul comenzii de 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. Se evaluează cu comanda „expr”. Operatorii sunt evaluați pe baza precedenței și asociativității. Limbajul TCL are operatori încorporați ca mai jos

OperaCategorie tor 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 ech 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

– Subtracts 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 de la 0. În timp ce valoarea lui „b” a devenit 0 de la 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 de caractere compară valoarea ambilor operanzi. Dacă valoarea operandului este aceeași, atunci va returna 1, altfel va returna 0. În exemplu, valoarea pentru A și B este 7, prin urmare, rezultatul va returna 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ă se găsește în lista definită, returnează 1, altfel va returna 0. În exemplu, valoarea 1 există în variabila „a”, prin urmare 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

Instrucțiunea If … else

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 cu o altă valoare a lui b, care 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 Loop permite executarea unei instrucțiuni sau a unui grup de instrucțiuni de mai multe ori. Tcl oferă următoarele tipuri de buclăping afirmație.

Î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, se folosește comanda încorporată „incr”. Aceasta înseamnă că valoarea lui „a” va fi mărită cu 1 până la valoarea maximă (<12).

Pentru comandă

Execută o secvență de instrucțiuni de mai multe ori pe baza unei valori a contorului. Aceasta este crescută sau scăzută automat î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 incrementată până la o valoare <5.

#!/usr/bin/tclsh

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

Ieșire: -

0
1
2
3
4

Întrebări frecvente

Da. Tcl este încă utilizat pentru automatizare, testare, instrumente EDA, scripting pentru dispozitive de rețea și integrare în aplicații. Instrumentul Expect și multe framework-uri de testare se bazează pe Tcl, deși este mai puțin comun pentru noile aplicații web.

Tcl este limbajul de scripting, în timp ce Tk este setul de instrumente grafice însoțitor pentru construirea de interfețe grafice. Împreună, sub numele de Tcl/Tk, acestea vă permit să scrieți aplicații desktop multiplatformă cu comenzi simple.

Comanda expr evaluează expresii matematice și logice în Tcl. Deoarece Tcl tratează totul ca un șir de caractere, comanda expr este necesară pentru a efectua operații aritmetice, comparații și booleene.

Asistenții inteligenți artificiali pot genera cod Tcl, pot explica comenzi precum set, puts și expr, pot converti pseudocodul în Tcl și pot depana erorile de sintaxă.ping începătorii învață limba mai repede.

Da. Instrumentele de inteligență artificială pot traduce scripturi Tcl în limbaje precum Python sau Perl, hartăping comenzi și structuri de control, deși dezvoltatorii ar trebui să verifice rezultatul pentru corectitudine.

Rezumați această postare cu: