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.

ยฟ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:
- Windows La aplicaciรณn basada estรก disponible aquรญ. archivo exe tcltutor
- 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
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
- Sustituciรณn de mando
- Sustituciรณn variable
- 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
- No se permite la sustituciรณn de variables dentro de {} llaves
- 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

