Tutoriel TCL TK : Langage de commande d'outil

Quโ€™est-ce que TCL ?

TCL est une application shell qui lit la commande TCL ร  partir de son entrรฉe standard ou d'un fichier et donne les rรฉsultats souhaitรฉs.

TCL est un langage de script basรฉ sur les chaรฎnes de caractรจres et รฉgalement un langage procรฉdural. Il a รฉtรฉ crรฉรฉ par John Osterhout en 1989. L'objectif du dรฉveloppementping Ce langage facilite le dรฉveloppement d'applications embarquรฉes. Il est couramment utilisรฉ pour les interfaces graphiques et les tests. Par exemple, pour le prototypage rapide.ping, Tests interaction avec la base de donnรฉes, etc. Dans TCL, par dรฉfaut, tout est une chaรฎne.

Dans ce tutoriel, vous apprendrez-

Comment exรฉcuter TCL

Il existe deux faรงons d'exรฉcuter du code TCL

  1. Windows l'application basรฉe est disponible ici fichier exe tcltutor
  2. Application basรฉe sur Linux

In Linux interprรฉteur interactif, nous pouvons exรฉcuter les scripts TCL comme ci-dessous

Pour accรฉder ร  la session interactive TCL, exรฉcutez la commande suivante

Tutoriel TCL : Langage de commande d'outil

Scripts TCL

Le programme TCL doit avoir une extension .tcl. Chaque script sous UNIX/LINUX commence par le chemin du shell TCL

#!/usr/bin/tclsh

Exemple:-

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

Sortie: Bonjour le monde

Dans TCL, la commande ยซ Puts ยป est utilisรฉe pour imprimer des messages sur la console. La syntaxe des puts est ci-dessous

met ?-pas de nouvelle ligne ? ?Identifiant de la chaine? chaรฎne

  • Pas de nouvelle ligne: Ce paramรจtre facultatif supprime le caractรจre de nouvelle ligne par la commande par dรฉfaut. Il met une nouvelle ligne ร  chaque chaรฎne
  • Identifiant de la chaine: Ce paramรจtre est utilisรฉ pour le canal d'entrรฉe standard (stdin) et le canal de sortie standard (stdout).

Ex:-

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

Type de remplacement TCL

Il existe trois types de substitutions dans TCL

  1. Substitution de commandes
  2. Substitution de variables
  3. Substitution de barre oblique inverse

ร‰tudions un par un

Substitution de commandes

Les crochets sont utilisรฉs pour la substitution de commandes.

Exemple:-

% puts [expr 1*3]
% 3

Ici, la commande entre crochets est รฉvaluรฉe en premier. Les rรฉsultats sont renvoyรฉs ..โ€exprโ€ utilisรฉ pour effectuer le calcul arithmรฉtique.

Substitution de variables

TCL effectue une substitution de variable ร  l'aide de $ signe.

Exemple:-

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

Ici, nous crรฉons une variable appelรฉe ยซ a ยป et lui donnons la valeur ยซ 10 ยป.

  • met a : il affichera la chaรฎne "a" mais pas la valeur de "a" sur la console
  • met $a : il imprimera la valeur de 'a' sur la console

Exรฉcutons-le et vรฉrifions-le. Vous obtiendrez le rรฉsultat comme ci-dessous.

$ ./substitution.tcl

a

10

Substitution de barre oblique inverse

En Tcl, la barre oblique inverse est utilisรฉe pour l'รฉchappement.ping Les caractรจres spรฉciaux, ainsi que la possibilitรฉ d'รฉtaler les commandes longues sur plusieurs lignes, sont pris en compte. Tout caractรจre suivant immรฉdiatement la barre oblique inverse est conservรฉ sans modification. Dans l'exemple ci-dessous, le caractรจre spรฉcial ยซ ยป, ยซ ยป, reste inchangรฉ aprรจs la barre oblique inverse.

Vรฉrifions cela avec un exemple

#!/usr/bin/tclsh

puts "This  is my  \"car\"

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

REMARQUE: -Pour commenter n'importe quelle chaรฎne dans TCL, ยซ # ยป est utilisรฉ. Tous les caractรจres aprรจs le ยซ # ยป sont ignorรฉs par la commande shell tclsh.

Variable TCL

Une variable est un identifiant qui contient une valeur. En dโ€™autres termes, une variable est une rรฉfรฉrence ร  une mรฉmoire dโ€™ordinateur, oรน la valeur est stockรฉe.

Les variables sont crรฉรฉes par ยซ commande set ยป et tous les noms de variables sont sensibles ร  la casse. Cela signifie bonjour, bonjour, BONJOUR, tous sont diffรฉrents en TCL. Regardez un exemple de variable sensible ร  la casse.

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

Production:-

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

Crรฉation de variables TCL

Pour crรฉer des variables dans TCL, vous devez utiliser "ensemble" commander

lot de 10

Pour obtenir la valeur de la variable, il faut utiliser le symbole ยซ $ ยป comme

% a mis $a

10%

Nous obtenons donc la valeur de la variable ยซ a ยป รฉgale ร  10.

Les informations sur la commande TCL existent

La commande ยซ set ยป est utilisรฉe pour crรฉer et lire des variables comme indiquรฉ ci-dessus. La commande unset est utilisรฉe pour dรฉtruire une variable. La commande ยซ info existe ยป renvoie 1 si varName existe en tant que variable (ou รฉlรฉment de tableau) dans le contexte actuel, sinon renvoie 0. (voir exemple ci-dessous).

Il existe diverses commandes ยซ info ยป dans TCL telles que ยซ info existe ยป, ยซ fonctions d'information ยป, ยซ info globale ยป, etc. Nous verrons ici un exemple de ยซ l'information existe ยป.

Ex:-

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

Diffรฉrents appareils orthodontiques et leur comportement

{} -> Accolades

Les accolades en TCL regroupent les mots pour devenir des arguments. Les accolades sont utilisรฉes pour dรฉfinir un bloc diffรฉrรฉ โ€“ en d'autres termes, il peut รชtre exรฉcutรฉ APRรˆS le reste de la commande sur la ligne actuelle. Les caractรจres entre accolades sont transmis ร  une commande exactement tels quโ€™ils sont รฉcrits.

Quelques points ร  retenir

  1. La substitution de variable n'est pas autorisรฉe entre {} accolades
  2. Il est utilisรฉ pour crรฉer un type de donnรฉes de liste

Exemple:-

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

%set number {1 2 3 4 5} -> Ici, le nombre est un type de donnรฉes de liste

%met un nombre $

%1 2 3 4 5

[] -> accolades

Les crochets sont utilisรฉs pour crรฉer une commande imbriquรฉe. En termes simples, sortie d'une commande passรฉe en argument ร  une autre commande. Les crochets sont utilisรฉs pour dรฉfinir un bloc qui est exรฉcutรฉ AVANT le reste de la commande sur la ligne actuelle, et le rรฉsultat est substituรฉ dans la ligne.

Ex: -

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

() -> accolades rondes

Cette commande est utilisรฉe pour crรฉer un type de donnรฉes tableau et รฉgalement indiquer la prioritรฉ des opรฉrateurs.

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

Ici, ยซ a ยป est un tableau avec les valeurs 10 et 20. Voir ci-dessous les commandes pour imprimer les clรฉs, les paires clรฉ-valeur et les valeurs du tableau.

% 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

Pour imprimer la ยซ Niรจme ยป valeur du tableau a, nous utiliserons Puts $a(N)

Arguments de ligne de commande TCL

Les รฉlรฉments de donnรฉes transmis ร  un script ร  partir de la ligne de commande sont appelรฉs arguments. Le nombre d'arguments de ligne de commande d'un script Tcl est transmis en tant que variable globale argc . Le nom d'un script Tcl est transmis au script en tant que variable globale argv0 , et le reste des arguments de ligne de commande sont passรฉs sous forme de liste dans argv.

TCL a 3 variables prรฉdรฉfinies telles que

$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

sortie:-

  • Nombre d'arguments passรฉs aux scripts : 3
  • La liste des arguments est transmise au script : 10 20 30
  • Le nom du script est : arg-script.tcl

Expression TCL et Operator

L'expression est construite ร  partir d'opรฉrandes et d'opรฉrateurs. Elle est รฉvaluรฉe avec la commande "expr". OperaLes opรฉrateurs sont รฉvaluรฉs en fonction de la prioritรฉ et de l'associativitรฉ. Le langage TCL possรจde des opรฉrateurs intรฉgrรฉs comme ci-dessous

OperaCatรฉgorie Symbole Prioritรฉ/Associativitรฉ
Arithmรฉtique Operator + - * / % De gauche ร  droite
Relationnel Operator == != < > <= >= De gauche ร  droite
logique Operator && || ! De gauche ร  droite
Bitwise Operator & | ^ ~ De gauche ร  droite
Ternaire Operator ?: De droite ร  gauche
Shift Operator << >> De gauche ร  droite
Comparaison de chaรฎnes Operator รฉquivalence De gauche ร  droite
Exponentiation Operator ** De gauche ร  droite
Liste Operator En ni De gauche ร  droite

Arithmรฉtique Operator

Une expression TCL consiste en une combinaison d'opรฉrandes, d'opรฉrateurs et de parenthรจses. Voyons un exemple d'opรฉrateurs arithmรฉtiques dans TCL

+ Ajouter deux ou plusieurs opรฉrandes

Ex:-

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

- Soustracdeux opรฉrandes ou plus

Ex:-

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

*Multiplier deux opรฉrandes ou plus

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

/ Diviser le numรฉrateur par le dรฉnumรฉrateur

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

L'opรฉrateur % Module divise le numรฉrateur par le dรฉnumรฉrateur mais renvoie un rappel

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

Relationnel Operator

Vรฉrifie si la valeur de l'opรฉrande gauche est supรฉrieure ร  la valeur de l'opรฉrande droit. Si oui, alors la condition devient vraie et renvoie 1, sinon renvoie 0.

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

Vรฉrifiez si la valeur de lโ€™opรฉrande gauche est infรฉrieure ร  la valeur de lโ€™opรฉrande droit. Si oui, alors la condition devient vraie et renvoie 1, sinon renvoie 0

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

>= Vรฉrifie si la valeur de l'opรฉrande gauche est supรฉrieure ou รฉgale ร  la valeur de l'opรฉrande droit, si oui alors la condition devient vraie et renvoie 1 sinon renvoie 0

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

<= Vรฉrifie si la valeur de l'opรฉrande gauche est infรฉrieure ou รฉgale ร  la valeur de l'opรฉrande droit, si oui alors la condition devient vraie et renvoie 1 sinon renvoie 0

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

!= Vรฉrifie si les valeurs de deux opรฉrandes sont รฉgales ou non, si les valeurs ne sont pas รฉgales alors la condition devient vraie et renvoie 1 sinon renvoie 0

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

== Vรฉrifie si les valeurs de deux opรฉrandes sont รฉgales ou non, si oui alors la condition devient vraie et renvoie 1 sinon renvoie 0

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

logique Operator

&& Si les deux opรฉrandes sont diffรฉrents de zรฉro, alors la condition devient vraie et renvoie 1, sinon renvoie 0

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

|| Si l'un des deux opรฉrandes est diffรฉrent de zรฉro, alors la condition devient vraie et renvoie 1, sinon renvoie 0.

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

! Utilisรฉ pour inverser le rรฉsultat de nโ€™importe quelle expression. Ici, dans la sortie, vous pouvez voir que la valeur de ยซ a ยป est maintenant passรฉe de 1 ร  0. Alors que la valeur de ยซ b ยป est passรฉe de 0 ร  1.

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

Bitwise Operator

& (bit ร  bit et) effectuez une opรฉration bit par bit et suivez le tableau ci-dessous pour le fonctionnement.

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 ร  bit ou) effectuez une opรฉration bit par bit et suivez le tableau ci-dessous

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 

^ (exclusif au niveau du bit ou) effectuez une opรฉration bit par bit et suivez le tableau ci-dessous

A B UNE ^ 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

L'opรฉrateur ~ (nรฉgation au niveau du bit) change chacun de 1 ร  0 et de 0 ร  1, suivez le tableau comme rรฉfรฉrence

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

Ternaire Operator (?:)

La syntaxe est

condition-expression?  expression_1: expression_2

Si condition-exp est vraie, exp1 est รฉvaluรฉe et le rรฉsultat est renvoyรฉ. Si cond-exp est faux, exp2 est รฉvaluรฉ et son rรฉsultat est renvoyรฉ. Dans notre exemple, exp1 est vraie car la valeur de A est supรฉrieure ร  6.

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

Shift Operator

Shift L'opรฉrateur est indiquรฉ soit par l'opรฉrateur de dรฉcalage ร  gauche <<, soit par l'opรฉrateur de dรฉcalage ร  droite >>. Pour l'opรฉrateur de dรฉcalage ร  gauche <<, la valeur de l'opรฉrande gauche est dรฉplacรฉe vers la gauche du nombre de bits spรฉcifiรฉ par l'opรฉrande droit.

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

Pour l'opรฉrateur de dรฉcalage vers la droite >>, la valeur de l'opรฉrande de gauche est dรฉplacรฉe vers la droite du nombre de bits spรฉcifiรฉ par l'opรฉrande de droite.

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

Comparaison de chaรฎnes Operator

L'opรฉrateur de comparaison de chaรฎnes compare la valeur des deux opรฉrandes. Si la valeur de l'opรฉrande est la mรชme, alors il renverra 1, sinon 0. Dans l'exemple, la valeur pour A et B est 7, donc le rรฉsultat renvoie 1.

Ex:-

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

Ne (si les valeurs des deux opรฉrandes sont diffรฉrentes, il renverra 1, sinon 0)

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

Opรฉrateur d'exponentiation

Pow () et ** sont tous deux identiques. Il renvoie toujours une valeur flottante.

** indique la puissance de l'opรฉrande souhaitรฉ.

Ex:-

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

Liste Operator

Si la valeur requise est trouvรฉe dans la liste dรฉfinie, elle renvoie 1, sinon elle renvoie 0. Dans l'exemple, la valeur 1 existe dans la variable ยซ a ยป, elle renverra donc 1.

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

ni, si la valeur requise est trouvรฉe dans la liste dรฉfinie, elle renverra 0, sinon elle renverra 1.

Ex :-

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

Contrรดle de flux TCL et prise de dรฉcision

Il existe diverses commandes de contrรดle de flux et de prise de dรฉcision qui sont utilisรฉes pour modifier le flux d'un programme. Les exรฉcutions du programme commencent toujours du haut du fichier source vers le bas.

L'instruction If consiste en une expression boolรฉenne suivie d'une ou plusieurs instructions.

Si... dรฉclaration

Syntaxe:-

si expr ?alors ? corps

si expr est รฉvaluรฉ ร  vrai, alors le corps de la commande est exรฉcutรฉ.

Ex:-

set age 10

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

Output: Age is less than 20

Si ... sinon dรฉclaration

Syntaxe :-

Si expression ? puis body_1 sinon body_2

Si l'expression est รฉvaluรฉe ร  vrai, elle renverra body_1 sinon elle renverra 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

Instruction if..else imbriquรฉe

Cela signifie qu'une instruction if ou else..if peut รชtre placรฉe dans une autre instruction if ou else..if.

Syntaxe:-

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

Instruction de commutation

L'instruction switch permet de tester l'รฉgalitรฉ d'une variable par rapport ร  une liste de valeurs. Il รฉvalue la liste de valeurs et renvoie le rรฉsultat de cette รฉvaluation. Si aucune valeur ne correspond, les valeurs par dรฉfaut seront renvoyรฉes.

Exemple:

#!/usr/bin/tclsh

# switch_cmd.tcl

set domain x
switch $domain {

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

Interrupteur imbriquรฉ

L'instruction switch imbriquรฉe signifie l'instruction switch ร  l'intรฉrieur d'une instruction switch.

Syntaxe :-

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

Exemple: Dans l'exemple suivant, la valeur de a est 100, et avec le mรชme code, nous changeons d'instruction pour une autre valeur de b est 200. La sortie affichera la valeur pour a et 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"
        }
     }
   }   
}

Production:-

La valeur de a est 100

La valeur de b est 200

Instruction de boucle TCL

L'instruction de boucle permet d'exรฉcuter une instruction ou un groupe d'instructions plusieurs fois. Tcl propose les types de boucles suivants.ping dรฉclaration.

Pendant que la commande

Lorsqu'une condition donnรฉe est vraie, une instruction ou un groupe d'instructions se rรฉpรจte et se trouve dans le corps de la boucle.

Syntaxe:

While  {condition} {
    Statements
}

Ex :-

#!/usr/bin/tclsh

Set a 10

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

Production:-

a vaut 10

a vaut 11

Dans l'exemple ci-dessus, la commande intรฉgrรฉe "incr" est utilisรฉe. Cela signifie que la valeur de ยซ a ยป sera augmentรฉe de 1 jusqu'ร  la valeur maximale (<12).

Pour la commande

Il exรฉcute une sรฉquence d'instructions plusieurs fois en fonction d'une valeur de compteur. Il est automatiquement augmentรฉ ou diminuรฉ ร  chaque rรฉpรฉtition de la boucle.

Syntaxe :-

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

Exemple: Dans l'exemple ci-dessous, la valeur de ยซ i ยป est dรฉfinie sur 0 et incrรฉmentรฉe jusqu'ร  la valeur <5.

#!/usr/bin/tclsh

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

Production:-

0 
1 
2 
3 
4

Rรฉsumรฉโ€ฏ:

  • TCL est un langage de script basรฉ sur des chaรฎnes et รฉgalement un langage procรฉdural
  • Le langage est couramment utilisรฉ pour les interfaces graphiques et les tests
  • Dans TCL, par dรฉfaut, tout est une chaรฎne
  • TCL est une application shell qui lit la commande TCL ร  partir de son entrรฉe standard ou d'un fichier et donne les rรฉsultats souhaitรฉs.
  • Le programme TCL devrait avoir l'extension .tcl

Rรฉsumez cet article avec :