Tutorial de Tcl/Tk

โšก Resumen inteligente

TCL (Tool Command Language) es un lenguaje de scripting y procedimental basado en cadenas creado por John Osterhout en 1989, ampliamente utilizado para GUI, prototipado rรกpido,pingy pruebas, donde cada valor se trata como una cadena por defecto.

  • ๐Ÿงต Definiciรณn de TCL: Un lenguaje de scripting y de programaciรณn procedimental basado en cadenas de caracteres, donde todo es una cadena de caracteres por defecto.
  • โ–ถ ๏ธ Ejecuciรณn: Ejecutar scripts Tcl a travรฉs del intรฉrprete de comandos tclsh en Windows o Linux, con archivos que utilizan la extensiรณn .tcl.
  • ๐Ÿ”„ Sustituciรณn: Admite la sustituciรณn de comandos (corchetes), variables ($) y barras invertidas.
  • ๐Ÿ“ฆ Variables: Creado con set, leรญdo con $, eliminado con unset y comprobado con info exists.
  • โž— Expresiones: El comando expr evalรบa operadores aritmรฉticos, relacionales, lรณgicos, bit a bit y otros.
  • ๐Ÿ”€ Control de flujo: Proporciona estructuras if/else, switch, while y for para la toma de decisiones y los bucles.

Tutorial de TCL/Tk

ยฟ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 scripting basado en cadenas y tambiรฉn un lenguaje procedimental. Fue creado por primera vez por John Osterhout en 1989. El propรณsito del desarrolloping Este lenguaje se integra fรกcilmente en aplicaciones. El lenguaje se usa comรบnmente para interfaces grรกficas de usuario (GUI) y pruebas. Por ejemplo, prototipos rรกpidos.ping, Pruebas interacciรณn de base de datos, etc. En TCL, por defecto, todo es una cadena.

Cรณmo ejecutar TCL

Hay dos maneras 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

Resultado: Hola Mundo

En TCL, el comando โ€œPutsโ€ se utiliza para imprimir mensajes en la consola. La sintaxis de puts es la siguiente.

pone ?-sin salto de lรญnea? ?channelId? 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. Se devuelve el resultado. Se utiliza โ€œexprโ€ 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.ping caracteres especiales, asรญ como para extender comandos largos a lo largo de varias lรญneas. Cualquier carรกcter que siga inmediatamente a la barra invertida permanecerรก sin sustituciรณn. En el ejemplo siguiente, 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 almacena un valor. En otras palabras, una variable es una referencia a la memoria de la computadora, donde se guarda dicho 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 eliminar una variable. El comando "info exists" devuelve 1 si varName existe como variable (o elemento de matriz) en el contexto actual; de lo contrario, devuelve 0 (vรฉase el ejemplo a continuaciรณn).

En TCL existen varios comandos de informaciรณn, como "info exists", "info functions", "info global", etc. Aquรญ veremos un ejemplo de "info exists".

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

En TCL, las llaves agrupan palabras para formar argumentos. Se utilizan para definir un bloque diferido; es decir, se ejecuta DESPUร‰S del resto del comando en la lรญnea actual. Los caracteres entre llaves se pasan al comando tal 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. Los corchetes definen un bloque que se ejecuta ANTES del resto del comando en la lรญnea actual, y el resultado se inserta 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 tor 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 igual 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

โ€“ Subtracdos 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! En la salida, se puede observar que el valor de 'a' ha pasado de 0 a 1, mientras que el valor de 'b' ha pasado de 1 a 0.

%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 los valores de los operandos son iguales, devuelve 1; de lo contrario, devuelve 0. En el ejemplo, el valor de A y B es 7, por lo tanto, el resultado es 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 โ€ฆ si no

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
         }
      }
   }

EjemploEn el siguiente ejemplo, el valor de a es 100, y con el mismo cรณdigo usamos una instrucciรณn switch para otro valor de b, que es 200. La salida mostrarรก el valor de a y 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 loop permite ejecutar una instrucciรณn o grupo de instrucciones varias veces. Tcl proporciona los siguientes tipos de loop:ping .

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". Esto significa que el valor de 'a' se incrementarรก en 1 hasta alcanzar el valor mรกximo (<12).

Para el mando

Ejecuta una secuencia de instrucciones varias veces en funciรณn del valor de un contador. Este contador se incrementa o decrementa 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 que el valor sea <5.

#!/usr/bin/tclsh

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

Salida:-

0
1
2
3
4

Preguntas Frecuentes

Sรญ. Tcl todavรญa se usa para automatizaciรณn, pruebas, herramientas EDA, scripting de dispositivos de red e integraciรณn en aplicaciones. La herramienta Expect y muchos marcos de prueba dependen de Tcl, aunque es menos comรบn en las nuevas aplicaciones web.

Tcl es el lenguaje de scripting, mientras que Tk es su conjunto de herramientas grรกficas complementarias para crear interfaces grรกficas de usuario (GUI). Juntos, como Tcl/Tk, permiten escribir aplicaciones de escritorio multiplataforma con comandos sencillos.

El comando expr evalรบa expresiones matemรกticas y lรณgicas en Tcl. Dado que Tcl trata todo como una cadena de caracteres, expr es necesario para realizar operaciones aritmรฉticas, comparaciones y operaciones booleanas.

Los asistentes de IA pueden generar cรณdigo Tcl, explicar comandos como set, puts y expr, convertir pseudocรณdigo a Tcl y depurar errores de sintaxis, ayudarping Los principiantes aprenden el idioma mรกs rรกpido.

Sรญ. Las herramientas de IA pueden traducir scripts Tcl a lenguajes como Python o Perl, mapping comandos y estructuras de control, aunque los desarrolladores deben revisar la salida para comprobar su correcciรณn.

Resumir este post con: