Tutorial de TCL TK: lenguaje de comandos de herramientas

ยฟQuรฉ es TCL?

TCL es una aplicaciรณn de shell que lee el comando TCL desde su entrada estรกndar o desde un archivo y proporciona los resultados deseados.

TCL es un lenguaje de secuencias de comandos basado en cadenas y tambiรฉn un lenguaje de procedimientos. Fue creado por primera vez por John Osterhout en 1989. El propรณsito de desarrollar este lenguaje es integrar fรกcilmente aplicaciones enti (). El lenguaje se usa comรบnmente para GUI y pruebas. Por ejemplo, la creaciรณn rรกpida de prototipos, Pruebas interacciรณn de base de datos, etc. En TCL, por defecto, todo es una cadena.

En este tutorial, aprenderรก-

Cรณmo ejecutar TCL

Hay dos formas de ejecutar cรณdigo TCL

  1. Windows La aplicaciรณn basada estรก disponible aquรญ. archivo exe tcltutor
  2. Aplicaciรณn basada en Linux

In Linux intรฉrprete interactivo, podemos ejecutar los scripts TCL como se muestra a continuaciรณn

Para acceder a la sesiรณn interactiva de TCL, ejecute el siguiente comando

Tutorial de TCL: lenguaje de comandos de herramientas

secuencias de comandos TCL

El programa TCL debe tener una extensiรณn .tcl. Cada script en UNIX/LINUX comienza con la ruta del shell TCL

#!/usr/bin/tclsh

Ejemplo:-

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

Salida: Hola Mundo

En TCL, el comando "Puts" se utiliza para imprimir mensajes en la consola. La sintaxis de las ventas se encuentra a continuaciรณn.

pone?-ninguna nueva lรญnea? ?ยฟCanal ID? cadena

  • Sin nueva lรญnea: este parรกmetro opcional suprime el carรกcter de nueva lรญnea mediante el comando predeterminado. Pone una nueva lรญnea a cada cadena.
  • Canal ID: Este parรกmetro se utiliza para el canal de entrada estรกndar (stdin) y el canal de salida estรกndar (stdout).

Ex:-

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

Tipo de sustituciรณn TCL

Hay tres tipos de sustituciones en TCL

  1. Sustituciรณn de mando
  2. Sustituciรณn variable
  3. sustituciรณn de barra invertida

Estudiemos uno por uno

Sustituciรณn de mando

Los corchetes se utilizan para sustituir comandos.

Ejemplo:-

% puts [expr 1*3]
% 3

Aquรญ se evalรบa primero el comando entre corchetes. El resultado es โ€exprโ€, que se utiliza para realizar el cรกlculo aritmรฉtico.

Sustituciรณn variable

TCL realiza la sustituciรณn de variables con la ayuda de $ firmar.

Ejemplo:-

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

Aquรญ creamos una variable llamada "a" y le asignamos el valor "10".

  • pone a: Imprimirรก la cadena "a" pero no el valor de "a" en la consola
  • pone $a: Imprimirรก el valor de 'a' en la consola

Ejecutรฉmoslo y verifiquรฉmoslo. Obtendrรก el resultado como se muestra a continuaciรณn.

$ ./substitution.tcl

a

10

sustituciรณn de barra invertida

En Tcl, la barra invertida se utiliza para escapar caracteres especiales, asรญ como para distribuir comandos largos en varias lรญneas. Cualquier carรกcter que aparezca inmediatamente despuรฉs de la barra invertida se mantendrรก sin sustituciรณn. En el siguiente ejemplo, puede ver que el carรกcter especial " " permanece despuรฉs de la barra invertida.

Comprobemos esto con un ejemplo.

#!/usr/bin/tclsh

puts "This  is my  \"car\"

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

NOTA: -Para comentar se utiliza cualquier cadena en TCL โ€œ#โ€. Todos los caracteres despuรฉs del "#" son ignorados por el comando tclsh shell.

Variable TCL

Una variable es un identificador que contiene un valor. En otras palabras, una variable es una referencia a la memoria de una computadora, donde se almacena el valor.

Las variables se crean mediante el "comando set" y todos los nombres de las variables distinguen entre mayรบsculas y minรบsculas. Significa hola, hola, HOLA, todos son diferentes en TCL. Mire algรบn ejemplo de variable que distingue entre mayรบsculas y minรบsculas.

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

Salida:-

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

Creando variables TCL

Para crear variables en TCL, debe usar "colocar" comando

juego de 10

Para obtener el valor de la variable hay que utilizar el sรญmbolo โ€œ$โ€ como

% poner $a

10%

Entonces obtenemos el valor de la variable 'a' como 10.

La informaciรณn del comando TCL existe

El comando โ€œsetโ€ se utiliza para crear y leer variables como se muestra arriba. El comando unset se utiliza para destruir una variable. El comando โ€œinfo existโ€ devuelve 1 si varName existe como una variable (o un elemento de matriz) en el contexto actual; de lo contrario, devuelve 0 (ver el ejemplo a continuaciรณn).

Hay varios comandos de "informaciรณn" en TCL como "existe informaciรณn", "funciones de informaciรณn", "informaciรณn global", etc. Aquรญ veremos un ejemplo de โ€œla informaciรณn existeโ€.

Ex:-

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

Diferentes brackets y su comportamiento.

{} -> Llaves

Las llaves en TCL agrupan palabras para convertirse en argumentos. Las llaves se utilizan para definir un bloque que se aplaza; en otras palabras, se puede ejecutar DESPUร‰S del resto del comando en la lรญnea actual. Los caracteres entre llaves se pasan a un comando exactamente como estรกn escritos.

Algunos puntos para recordar

  1. No se permite la sustituciรณn de variables dentro de {} llaves
  2. Solรญa โ€‹โ€‹โ€‹โ€‹crear el tipo de datos de lista.

Ejemplo:-

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

% establecer nรบmero {1 2 3 4 5} -> Aquรญ el nรบmero es un tipo de datos de lista

%pone $nรบmero

% 1 2 3 4 5

[] -> llaves cuadradas

Los corchetes se utilizan para crear comandos anidados. En pocas palabras, la salida de un comando se pasa como argumento a otro comando. Los corchetes se utilizan para definir un bloque que se ejecuta ANTES del resto del comando en la lรญnea actual y el resultado se sustituye en la lรญnea.

Ej .: -

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

() -> llaves redondas

Este comando se utiliza para crear un tipo de datos de matriz y tambiรฉn para indicar la precedencia del operador.

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

Aquรญ "a" es una matriz con valores 10 y 20. Consulte los comandos a continuaciรณn para imprimir claves, pares clave-valor y valores de la matriz.

% 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

Para imprimir el valor โ€œNthโ€ de la matriz a, usaremos Puts $a(N)

Argumentos de la lรญnea de comandos TCL

Los elementos de datos pasados โ€‹โ€‹a un script desde la lรญnea de comando se conocen como argumentos. El nรบmero de argumentos de la lรญnea de comando para un script Tcl se pasa como variable global argc . El nombre de un script Tcl se pasa al script como variable global argv0 , y el resto de los argumentos de la lรญnea de comando se pasan como una lista en argv.

TCL tiene 3 variables predefinidas como

$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

salida:-

  • Nรบmero de argumentos pasados โ€‹โ€‹a los scripts: 3
  • La lista de argumentos se pasa al script: 10 20 30
  • El nombre del script es: arg-script.tcl

Expresiรณn TCL y Operator

La expresiรณn se construye a partir de operandos y operadores. Se evalรบa con el comando "expr". OperaLos operadores se evalรบan en funciรณn de la precedencia y la asociatividad. El lenguaje TCL tiene operadores integrados como los siguientes

Operacategorรญa de motor Sรญmbolo Prioridad/Asociatividad
Aritmรฉtica Operator + - * / % De izquierda a derecha
Relacional Operator == != = De izquierda a derecha
lรณgico Operator && || ! De izquierda a derecha
Bitwise Operator & | ^ ~ De izquierda a derecha
Ternario Operator ?: De derecha a izquierda
Shift Operator > De izquierda a derecha
Comparaciรณn de cadenas Operator ecuaciรณn ne De izquierda a derecha
Exponenciaciรณn Operator ** De izquierda a derecha
Lista Operator en ni De izquierda a derecha

Aritmรฉtica Operator

Una expresiรณn TCL consta de una combinaciรณn de operandos, operadores y parรฉntesis. Veamos un ejemplo de operadores aritmรฉticos en TCL

+ Agregar dos o mรกs operandos

Ex:-

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

- Resta dos o mรกs operandos

Ex:-

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

*Multiplica dos o mรกs operandos

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

/ Dividir numerador por denumerador

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

El operador de mรณdulo divide el numerador por el desnumerador pero devuelve un recordatorio

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

Relacional Operator

Comprueba si el valor del operando izquierdo es mayor que el valor del operando derecho. Si es asรญ, la condiciรณn se vuelve verdadera y devuelve 1; de lo contrario, devuelve 0.

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

Comprueba si el valor del operando izquierdo es menor que el valor del operando derecho. Si es asรญ, la condiciรณn se vuelve verdadera y devuelve 1; de lo contrario, devuelve 0.

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

>= Comprueba si el valor del operando izquierdo es mayor o igual que el valor del operando derecho, si es asรญ, la condiciรณn se vuelve verdadera y devuelve 1, de lo contrario devuelve 0

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

<= Comprueba si el valor del operando izquierdo es menor o igual que el valor del operando derecho, si es asรญ, la condiciรณn se vuelve verdadera y devuelve 1, de lo contrario devuelve 0

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

!= Comprueba si los valores de dos operandos son iguales o no, si los valores no son iguales, la condiciรณn se vuelve verdadera y devuelve 1, de lo contrario devuelve 0

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

== Comprueba si los valores de dos operandos son iguales o no, si es asรญ, la condiciรณn se vuelve verdadera y devuelve 1, de lo contrario devuelve 0

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

lรณgico Operator

&& Si ambos operandos son distintos de cero, entonces la condiciรณn se vuelve verdadera y devuelve 1; de lo contrario, devuelve 0.

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

|| Si alguno de los dos operandos no es cero, entonces la condiciรณn se vuelve verdadera y devuelve 1; de lo contrario, devuelve 0.

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

! Se utiliza para invertir el resultado de cualquier expresiรณn. Aquรญ en el resultado, puede ver que el valor de 'a' ahora pasรณ a ser 1 de 0. Mientras que el valor de 'b' pasรณ de 0 a 1.

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

Bitwise Operator

& (bit a bit y) realiza la operaciรณn bit a bit y sigue la siguiente tabla para la operaciรณn.

A B A y 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) realice la operaciรณn bit a bit y siga la siguiente tabla

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 

^ (bit a bit exclusivo o) realiza la operaciรณn bit a bit y sigue la siguiente tabla

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

El operador ~ (negaciรณn bit a bit) cambia cada 1 a 0 y 0 a 1, siga la tabla como referencia

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

Ternario Operator (?:)

La sintaxis es

condition-expression?  expression_1: expression_2

Si condition-exp es verdadera, se evalรบa exp1 y se devuelve el resultado. Si cond-exp es falso, se evalรบa exp2 y se devuelve su resultado. En nuestro ejemplo, exp1 es verdadero ya que el valor de A es mayor que 6.

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

Shift Operator

Shift El operador se denota por el operador de desplazamiento a la izquierda << o por el operador de desplazamiento a la derecha >>. Para el operador de desplazamiento a la izquierda <<, el valor del operando izquierdo se mueve a la izquierda la cantidad de bits especificada por el operando derecho.

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

Para el operador de desplazamiento a la derecha >>, el valor del operando izquierdo se mueve a la derecha la cantidad de bits especificada por el operando derecho.

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

Comparaciรณn de cadenas Operator

El operador de comparaciรณn de cadenas compara el valor de ambos operandos. Si el valor de los operandos es el mismo, devolverรก 1; de lo contrario, devolverรก 0. En el ejemplo, el valor de A y B es 7, por lo que el resultado devuelve 1.

Ex:-

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

Ne (si el valor de ambos operandos es diferente, devolverรก 1; de lo contrario, devolverรก 0)

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

Operador de exponenciaciรณn

Pow () y ** ambos son iguales. Siempre devuelve un valor flotante.

** indica la potencia del operando deseado.

Ex:-

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

Lista Operator

Si el valor requerido se encuentra en la lista definida, devuelve 1; de lo contrario, devuelve 0. En el ejemplo, el valor 1 existe en la variable 'a', por lo que devolverรก 1.

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

ni, si el valor requerido se encuentra en la lista definida, devolverรก 0; de lo contrario, devolverรก 1.

Ex :-

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

Control de flujo TCL y toma de decisiones.

Existen varios comandos de control de flujo y toma de decisiones que se utilizan para alterar el flujo de un programa. Las ejecuciones del programa siempre comienzan desde la parte superior del archivo fuente hasta el final.

La declaraciรณn If consta de una expresiรณn booleana seguida de una o mรกs declaraciones.

Si... declaraciรณn

Sintaxis:-

si expr? entonces? cuerpo

Si expr se evalรบa como verdadero, entonces se ejecuta el cuerpo del comando.

Ex:-

set age 10

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

Output: Age is less than 20

Si... otra declaraciรณn

Sintaxis:-

Si expresiรณn? entonces cuerpo_1 mรกs cuerpo_2

Si la expresiรณn se evalรบa como verdadera, devolverรก cuerpo_1; de lo contrario, devolverรก cuerpo_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

Declaraciรณn anidada if...else

Significa que una declaraciรณn si o si no... si se puede poner dentro de otra declaraciรณn si o si no... si.

Sintaxis:-

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

Declaraciรณn de cambio

La declaraciรณn de cambio permite probar la igualdad de una variable con una lista de valores. Evalรบa la lista de valores y devuelve el resultado de esa evaluaciรณn. Si ningรบn valor coincide, se devolverรกn los valores predeterminados.

Ejemplo:

#!/usr/bin/tclsh

# switch_cmd.tcl

set domain x
switch $domain {

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

Interruptor anidado

La declaraciรณn de cambio anidada significa una declaraciรณn de cambio dentro de una declaraciรณn de cambio.

Sintaxis :-

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

Ejemplo:En el siguiente ejemplo, el valor de a es 100, y con el mismo cรณdigo cambiamos la declaraciรณn por otro valor de b que es 200. La salida mostrarรก el valor tanto de a como de 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"
        }
     }
   }   
}

Salida:-

el valor de a es 100

el valor de b es 200

Declaraciรณn de bucle TCL

La instrucciรณn de bucle permite ejecutar una instrucciรณn o un grupo de instrucciones varias veces. Tcl ofrece los siguientes tipos de instrucciones de bucle.

mientras comando

Cuando una condiciรณn dada es verdadera, se repite una declaraciรณn o un grupo de declaraciones que estรกn en el cuerpo del bucle.

Sintaxis:

While  {condition} {
    Statements
}

Ex :-

#!/usr/bin/tclsh

Set a 10

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

Salida:-

un es 10

un es 11

En el ejemplo anterior, se utiliza el comando integrado "incr". Significa que el valor de 'a' se incrementarรก en 1 hasta el valor mรกximo (<12).

Para el mando

Ejecuta una secuencia de declaraciones varias veces en funciรณn de un valor de contador. Aumenta o disminuye automรกticamente durante cada repeticiรณn del bucle.

Sintaxis :-

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

Ejemplo: En el siguiente ejemplo, el valor de 'i' se establece en 0 y se incrementa hasta el valor <5.

#!/usr/bin/tclsh

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

Salida:-

0 
1 
2 
3 
4

Resumen:

  • TCL es un lenguaje de secuencias de comandos basado en cadenas y tambiรฉn un lenguaje de procedimientos.
  • El lenguaje se usa comรบnmente para GUI y pruebas.
  • En TCL por defecto todo es cadena
  • TCL es una aplicaciรณn de shell que lee el comando TCL desde su entrada estรกndar o desde un archivo y proporciona los resultados deseados.
  • El programa TCL debe tener la extensiรณn .tcl

Resumir este post con: