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-
- Ce este TCL
- Cum se execută TCL
- Scripturi TCL
- Tip de înlocuire TCL
- Variabila TCL
- Expresia TCL și OperaTdR
- Controlul fluxului TCL și luarea deciziilor
Cum se execută TCL
Există două moduri de a executa codul TCL
- Windows aplicația bazată este disponibilă aici fișierul tcltutor exe
- 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ă
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
- Înlocuirea comenzilor
- Substituție variabilă
- Î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
- Înlocuirea variabilelor nu este permisă între {} acolade
- 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