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-

Come eseguire TCL

Esistono due modi per eseguire il codice TCL

  1. Windows l'applicazione basata è disponibile qui file exe di tcltutor
  2. 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

Tutorial TCL: linguaggio di comando degli strumenti

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

  1. Sostituzione del comando
  2. Sostituzione variabile
  3. 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

  1. La sostituzione di variabili non è consentita tra parentesi graffe {}
  2. 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