Tutorial TCL TK: linguaggio di comando degli strumenti
Cos'è il TCL?
TCL è un'applicazione shell che legge il comando TCL dal suo input standard o da un file e fornisce i risultati desiderati.
TCL è un linguaggio di scripting basato su stringhe e anche un linguaggio procedurale. È stato creato per la prima volta da John Osterhout nel 1989. Lo scopo di sviluppare questo linguaggio è quello di incorporare facilmente applicazioni inti ( ). Il linguaggio è comunemente usato per GUI e test. Ad esempio, la prototipazione rapida, Testing interazione con il database, ecc. In TCL per impostazione predefinita tutto è una stringa.
In questo tutorial imparerai-
- Cos'è TCL
- Come eseguire TCL
- Script TCL
- Tipo di sostituzione TCL
- Variabile TCL
- Espressione TCL e Operator
- Controllo del flusso TCL e processo decisionale
Come eseguire TCL
Esistono due modi per eseguire il codice TCL
- Windows l'applicazione basata è disponibile qui file exe di tcltutor
- Applicazione basata su Linux
In Linux interprete interattivo, possiamo eseguire gli script TCL come di seguito
Per accedere alla sessione interattiva TCL, eseguire il seguente comando
Script TCL
Il programma TCL dovrebbe avere un'estensione .tcl. Ogni script in UNIX/LINUX inizia con il percorso della shell TCL
#!/usr/bin/tclsh
Esempio:-
#!/usr/bin/tclsh Puts "Hello World" Script execution:- $ chmod +x helloworld.tcl $ ./helloworld.tcl
Uscita: Ciao mondo
In TCL, il comando "Puts" viene utilizzato per stampare messaggi sulla console. La sintassi di put è riportata di seguito
mette?-nonewline? ?Canale ID? corda
- Nessuna nuova riga: questo parametro facoltativo sopprime il carattere di nuova riga per comando predefinito. Mette una nuova riga in ogni stringa
- Canale ID: Questo parametro viene utilizzato per il canale di ingresso standard (stdin) e il canale di uscita standard (stdout).
Ex:-
%puts "Hello World" % Hello World %puts stdout "Hello World" % Hello World
Tipo di sostituzione TCL
Esistono tre tipi di sostituzioni in TCL
- Sostituzione del comando
- Sostituzione variabile
- Sostituzione della barra rovesciata
Studiamo uno per uno
Sostituzione del comando
Le parentesi quadre vengono utilizzate per la sostituzione dei comandi.
Esempio:-
% puts [expr 1*3] % 3
Qui il comando tra parentesi quadre viene valutato per primo. Il risultato è restituito .”expr” utilizzato per eseguire il calcolo aritmetico.
Sostituzione variabile
TCL esegue la sostituzione delle variabili con l'aiuto di $ segno.
Esempio:-
#!/usr/bin/tclsh set a 10 puts a puts $a
Qui creiamo una variabile chiamata "a" e le impostiamo il valore "10".
- inserisce a : stamperà la stringa "a" ma non il valore di "a" sulla console
- puts $a : stamperà il valore di "a" sulla console
Eseguiamolo e verifichiamolo. Otterrai l'output come di seguito.
$ ./substitution.tcl
a
10
Sostituzione della barra rovesciata
In Tcl, la barra rovesciata viene utilizzata per l'escape di caratteri speciali e per distribuire comandi lunghi su più righe. Qualsiasi carattere immediatamente successivo alla barra rovesciata rimarrà senza sostituzione. Nell'esempio seguente, puoi vedere il carattere speciale " ", rimane dopo la barra rovesciata.
Verifichiamolo con un esempio
#!/usr/bin/tclsh puts "This is my \"car\" $ ./backslashsubstitution.tcl This is my "car"
NOTA: -Per commentare qualsiasi stringa in TCL viene utilizzato “#”. Tutti i caratteri dopo il "#" vengono ignorati dal comando shell tclsh.
Variabile TCL
Una variabile è un identificatore che contiene un valore. In altre parole, una variabile è un riferimento alla memoria del computer, dove è memorizzato il valore.
Le variabili vengono create dal "comando set" e tutti i nomi delle variabili fanno distinzione tra maiuscole e minuscole. Significa ciao, ciao, CIAO, sono tutti diversi in TCL. Guarda alcuni esempi di variabili con distinzione tra maiuscole e minuscole.
% set name Techoit % set Name Technoit_1 % set NAME Technoit_2
Produzione:-
% puts $name % Technoit %puts $Name %Technoit_1 %puts $NAME %Technoit_2
Creazione di variabili TCL
Per creare variabili in TCL, è necessario utilizzare "impostare" command
Imposta un 10
Per ottenere il valore della variabile è necessario utilizzare il simbolo "$" come
% ha messo $a
10%
Quindi otteniamo il valore della variabile "a" come 10.
Esistono informazioni sul comando TCL
Il comando "set" viene utilizzato per creare e leggere variabili come mostrato sopra. Il comando unset viene utilizzato per distruggere una variabile. Il comando "info exist" restituisce 1 se varName esiste come variabile (o elemento array) nel contesto corrente, altrimenti restituisce 0. (vedi esempio sotto).
Esistono vari comandi "informazioni" in TCL come "informazioni esistono", "funzioni informazioni", "informazioni globali" e così via. Qui vedremo un esempio di “info esiste”.
Ex:-
% set a 20 % puts $a % 20 % puts [info exists a] % 1 % unset a %puts [info exists a] % 0
Diversi apparecchi ortodontici e il loro comportamento
{} -> Parentesi graffe
Le parentesi graffe in TCL raggruppano le parole per farle diventare argomenti. Le parentesi graffe vengono utilizzate per definire un blocco rinviato, in altre parole, può essere eseguito DOPO il resto del comando sulla riga corrente. I caratteri tra parentesi graffe vengono passati a un comando esattamente come sono scritti.
Alcuni punti da ricordare
- La sostituzione di variabili non è consentita tra parentesi graffe {}
- Utilizzato per creare il tipo di dati elenco
Esempio:-
% set x 10 % puts {$x} % $x
%set numero {1 2 3 4 5} -> Qui numero è un tipo di dati di elenco
% inserisce $numero
%1 2 3 4 5
[] -> parentesi quadre
Le parentesi quadre vengono utilizzate per creare comandi nidificati. In parole povere, l'output di un comando viene passato come argomento a un altro comando. Le parentesi quadre vengono utilizzate per definire un blocco che viene eseguito PRIMA del resto del comando sulla riga corrente e il risultato viene sostituito nella riga.
Es: –
% set x 10 % puts "y : [set y [set x 10]]" %y : 10 % puts "x : $x" %x : 10
() -> parentesi tonde
Questo comando viene utilizzato per creare il tipo di dati array e indicare anche la precedenza degli operatori.
% set a(1) 10 % set a(2) 20
Qui "a" è un array con valore 10 e 20. Vedi i comandi seguenti per stampare chiavi, coppie chiave-valore e valori dell'array.
% 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
Per stampare il valore "Nesimo" dell'array a, utilizzeremo Puts $a(N)
Argomenti della riga di comando TCL
Gli elementi di dati passati a uno script dalla riga di comando sono noti come argomenti. Il numero di argomenti della riga di comando a uno script Tcl viene passato come variabile globale argomento . Il nome di uno script Tcl viene passato allo script come variabile globale argv0 e il resto degli argomenti della riga di comando vengono passati come elenco in arv.
TCL ha 3 variabili predefinite come
$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
produzione:-
- Numero di argomenti passati agli script: 3
- L'elenco degli argomenti viene passato allo script: 10 20 30
- Il nome dello script è: arg-script.tcl
Espressione TCL e Operator
Expression è costruita da operandi e operatori. Viene valutata con il comando "expr". OperaI tor vengono valutati in base alla precedenza e all'associatività. Il linguaggio TCL ha operatori incorporati come di seguito
Operacategoria tor | Simbolo | Precedenza/associatività |
---|---|---|
Aritmetica Operator | + - */% | Da sinistra a destra |
Relazionale Operator | == != < > <= >= | Da sinistra a destra |
logico Operator | && || ! | Da sinistra a destra |
bitwise Operator | & | ^~ | Da sinistra a destra |
Ternario Operator | ?: | Da destra a sinistra |
Shift Operator | << >> | Da sinistra a destra |
Confronto di stringhe Operator | eq ne | Da sinistra a destra |
elevamento a potenza Operator | ** | Da sinistra a destra |
Lista Operator | Nel ni | Da sinistra a destra |
Aritmetica Operator
Un'espressione TCL è costituita da una combinazione di operandi, operatori e parentesi. Vediamo un esempio di operatori aritmetici in TCL
+ Aggiungi due o più operandi
Ex:-
%set a 10 %set b 20 %puts [expr $a + $b] 30
- Sottrae due o più operandi
Ex:-
%set a 20 %set b 10 %puts [expr $a - $b] 10
*Moltiplica due o più operandi
%set a 20 %set b 10 %puts [expr $a * $b] 200
/ Dividi numeratore per denumeratore
%set a 20 %set b 10 %puts [expr $a / $b] 2
L'operatore Modulo % divide il numeratore per il denumeratore ma restituisce un promemoria
%set a 20 %set b 10 %puts [expr $a % $b] 0
Relazionale Operator
Controlla se il valore dell'operando sinistro è maggiore del valore dell'operando destro. Se sì, la condizione diventa vera e restituisce 1, altrimenti restituisce 0.
%set a 20 %set b 10 %puts [expr $a > $b] 1
Controlla se il valore dell'operando sinistro è inferiore al valore dell'operando destro. Se sì, la condizione diventa vera e restituisce 1, altrimenti restituisce 0
%set a 10 %set b 20 %puts [expr $a < $b] 1
>= Controlla se il valore dell'operando di sinistra è maggiore o uguale al valore dell'operando di destra, se sì allora la condizione diventa vera e restituisce 1 altrimenti restituisce 0
%set a 20 %set b 10 %puts [expr $a >= $b] 1
<= Controlla se il valore dell'operando di sinistra è inferiore o uguale al valore dell'operando di destra, se sì allora la condizione diventa vera e restituisce 1 altrimenti restituisce 0
%set a 20 %set b 10 %puts [expr $a <= $b] 0
!= Controlla se i valori di due operandi sono uguali o meno, se i valori non sono uguali la condizione diventa vera e restituisce 1 altrimenti restituisce 0
%set a 20 %set b 10 %puts [expr $a != $b] 1
== Controlla se i valori di due operandi sono uguali o meno, se sì allora la condizione diventa vera e restituisce 1 altrimenti restituisce 0
%set a 20 %set b 10 %puts [expr $a == $b] 0
logico Operator
&& Se entrambi gli operandi sono diversi da zero, la condizione diventa vera e restituisce 1 altrimenti restituisce 0
%set a 20 %set b 10 %puts [expr $a && $b] 1
|| Se uno qualsiasi dei due operandi è diverso da zero, la condizione diventa vera e restituisce 1, altrimenti restituisce 0
%set a 0 %set b 10 %puts [expr $a || $b] 1
! Utilizzato per invertire il risultato di qualsiasi espressione. Qui nell'output, puoi vedere che il valore di "a" è ora diventato 1 da 0. Mentre il valore di "b" è diventato 0 da 1.
%set a 0 %set b 1 %puts [expr !$a] 1 %puts [expr !$b] 0
bitwise Operator
& (and bit a bit) esegue operazioni bit per bit e segue la tabella seguente per il funzionamento.
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
| (bit a bit o) eseguire operazioni bit per bit e seguire la tabella seguente
A | B | UN | 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
^ (bitwise esclusivo o) esegue l'operazione bit per bit e segue la tabella seguente
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
~ (negazione bit a bit) l'operatore cambia ogni 1 in 0 e 0 in 1, seguire la tabella come riferimento
A | ~A |
---|---|
0 | 1 |
1 | 0 |
%set A 7 %puts [expr ~$A] -8
Ternario Operator (?:)
La sintassi è
condition-expression? expression_1: expression_2
Se condizione-exp è vera, viene valutata exp1 e viene restituito il risultato. Se cond-exp è false, viene valutato exp2 e viene restituito il suo risultato. Nel nostro esempio, exp1 è vero poiché il valore di A è maggiore di 6.
%set A 7 %set result [expr $A > 6 ? true : false] %puts $result true
Shift Operator
Shift L'operatore è indicato con << operatore di spostamento a sinistra, oppure con >> operatore di spostamento a destra. Per << operatore di spostamento a sinistra, il valore dell'operando di sinistra viene spostato a sinistra del numero di bit specificato dall'operando di destra.
%set A 7 %set result [expr $A << 2] %puts $result
Per l'operatore >> spostamento a destra, il valore dell'operando di sinistra viene spostato a destra del numero di bit specificato dall'operando di destra.
%set A 7 %set result [expr $A >> 2] %puts $result
Confronto di stringhe Operator
L'operatore di confronto stringhe confronta il valore di entrambi gli operandi. Se il valore dell'operando è lo stesso, allora restituirà 1 altrimenti restituirà 0. Nell'esempio il valore per entrambi A e B è 7, quindi il risultato restituisce 1.
Ex:-
%set A 7 %set B 7 %set result [expr $A eq $B] %puts $result 1
Ne (se il valore di entrambi gli operandi è diverso, restituirà 1 altrimenti restituirà 0)
%set A 7 %set B 8 %set result [expr $A ne $B] %puts $result 1
Operatore di esponenziazione
Pow () e ** sono entrambi uguali. Restituisce sempre un valore mobile.
** indica la potenza dell'operando desiderato.
Ex:-
%set A 7 %set result [expr $A ** 2] %puts $result 49
Lista Operator
Se il valore richiesto si trova nell'elenco definito, restituisce 1 altrimenti restituisce 0. Nell'esempio il valore 1 esiste nella variabile "a" quindi restituirà 1.
set a {1 2 3} if {1 in $a} { puts "ok" } else { puts "fail" } Output: ok
ni, se il valore richiesto viene trovato nell'elenco definito, restituirà 0 altrimenti restituirà 1.
Es:-
set a {1 2 3} if {1 ni $a} { puts "ok" } else { puts "fail" } Output: fail
Controllo del flusso TCL e processo decisionale
Esistono vari comandi di controllo del flusso e di processo decisionale che vengono utilizzati per alterare il flusso di un programma. Le esecuzioni del programma iniziano sempre dall'alto verso il basso del file sorgente.
Se l'istruzione è costituita da un'espressione booleana seguita da una o più istruzioni.
Se... dichiarazione
Sintassi:-
se expr? allora? corpo
se expr viene valutato su true, viene eseguito il corpo del comando.
Ex:-
set age 10 if {$age < 20} { puts "Age is less than 20" } Output: Age is less than 20
Se... altrimenti istruzione
Sintassi:-
Se espressione? poi body_1 altrimenti body_2
Se l'espressione viene valutata come vera, restituirà body_1 altrimenti restituirà 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
Istruzione if...else nidificata
Significa che un'istruzione if or else..if può essere inserita all'interno di un'altra istruzione if or else..if.
Sintassi:-
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
Cambia dichiarazione
L'istruzione switch consente di verificare l'uguaglianza di una variabile rispetto a un elenco di valori. Valuta l'elenco di valori e restituisce il risultato di tale valutazione. Se nessun valore corrisponde, verranno restituiti i valori predefiniti.
Esempio:
#!/usr/bin/tclsh # switch_cmd.tcl set domain x switch $domain { x { puts "x" } y { puts "y" } z { puts "z" } default { puts "unknown" } }
Interruttore nidificato
Un'istruzione switch nidificata indica un'istruzione switch all'interno di un'istruzione switch.
Sintassi :-
switch <switchingstring1> { <matchstring1> { body1 switch <switchingstring2> { <matchstring2> { body2 } ... switch <switchingstringN> { <matchStringN> { bodyN } } }
Esempio: Nell'esempio seguente, il valore di a è 100 e con lo stesso codice cambiamo istruzione per un altro valore di b che è 200. L'output mostrerà il valore sia per a che per 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" } } } }
Produzione:-
Il valore di a è 100
Il valore di b è 200
Dichiarazione TCL Loop
L'istruzione Loop consente di eseguire un'istruzione o un gruppo di istruzioni più volte. Tcl fornisce i seguenti tipi di istruzione di looping.
Mentre comando
Quando una determinata condizione è vera, si ripete un'istruzione o un gruppo di istruzioni che si trovano nel corpo del ciclo.
Sintassi:
While {condition} { Statements }
Es:-
#!/usr/bin/tclsh Set a 10 While {$a < 12} { Puts "a is $a" incr a }
Produzione:-
a è 10
a è 11
Nell'esempio precedente viene utilizzato il comando integrato "incr". Significa che il valore di 'a' verrà aumentato di 1 fino al valore massimo (<12).
Per comando
Esegue una sequenza di istruzioni più volte in base a un valore del contatore. Viene automaticamente aumentato o diminuito durante ogni ripetizione del ciclo.
Sintassi :-
For {start} {test} {next} { Body }
Esempio: Nell'esempio seguente il valore di 'i' è impostato su 0 e incrementato fino al valore <5.
#!/usr/bin/tclsh for {set i 0} {$i < 5} {incr i} { put $i }
Produzione:-
0 1 2 3 4
Sommario:
- TCL è un linguaggio di scripting basato su stringhe e anche un linguaggio procedurale
- Il linguaggio è comunemente usato per GUI e test
- In TCL per impostazione predefinita tutto è stringa
- TCL è un'applicazione shell che legge il comando TCL dal suo input standard o da un file e fornisce i risultati desiderati.
- Il programma TCL dovrebbe avere l'estensione .tcl