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. La aplicación basada en Windows 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 lo siguientewing 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 la sustitución de comandos.

Ejemplo:-

% puts [expr 1*3]
% 3

Aquí se evalúa primero el comando entre corchetes. Los resultados se devuelven "expr" utilizado 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 de caracteres especiales y para distribuir comandos largos en varias líneas. Cualquier personaje sigue inmediatamente.wing la barra invertida se mantendrá sin sustitución. En el siguiente ejemplo, puede ver el carácter especial " " que 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 "establecer" se utiliza para crear y leer variables como se muestra arriba. El comando unset se utiliza para destruir una variable. El comando "la información existe" devuelve 1 si varName existe como una variable (o un elemento de matriz) en el contexto actual; de lo contrario, devuelve 0 (consulte 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 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 y operador TCL

La expresión se construye a partir de operandos y operadores. Se evalúa con el comando "expr". Los operadores se evalúan según la precedencia y la asociatividad. El lenguaje TCL tiene operadores integrados como se muestra a continuación

Categoría de operador Símbolo Prioridad/Asociatividad
Operador aritmético + - * / % De izquierda a derecha
Operador relacional == != = De izquierda a derecha
Operador lógico && || ! De izquierda a derecha
Operador bit a bit & | ^ ~ De izquierda a derecha
Operador ternario ?: De derecha a izquierda
Operador de turno > De izquierda a derecha
Operador de comparación de cadenas ecuación ne De izquierda a derecha
Operador de exponenciación ** De izquierda a derecha
Operador de lista en ni De izquierda a derecha

Operador aritmético

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

+ Sumar 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

*Multiplicar 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 denumerador pero devuelve un recordatorio

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

Operador relacional

Comprueba si el valor del operando izquierdo es mayor que el valor del operando derecho. En caso afirmativo, 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

Compruebe si el valor del operando izquierdo es menor que el valor del operando derecho. En caso afirmativo, entonces 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; en caso afirmativo, 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; en caso afirmativo, 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 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

== Comprueba si los valores de dos operandos son iguales o no, en caso afirmativo, 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

Operador lógico

&& 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 es distinto de 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

Operador bit a bit

& (bit a bit y) realice una operación bit a bit y siga 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 una 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) realice una operación bit a bit y siga 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

Operador ternario (?:)

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

Operador de turno

El operador de cambio se indica mediante > operador de cambio a la derecha. Para << operador de desplazamiento a la izquierda, el valor de los operandos izquierdos se mueve hacia la izquierda el número de bits especificado por el operando derecho.

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

Para el operador de desplazamiento a la derecha >>, el valor de los operandos izquierdos se mueve hacia la derecha el número de bits especificado por el operando derecho.

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

Operador de comparación de cadenas

Comp. del operador de comparación de cadenasares el valor de ambos operandos. Si el valor del operando es el mismo, devolverá 1; de lo contrario, devolverá 0. En el ejemplo, el valor para A y B es 7, por lo tanto, el resultado devolverá 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

Operador de lista

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: A continuaciónwing Por 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 para a como para 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 declaración de bucle permite ejecutar una declaración o un grupo de declaraciones varias veces. Tcl proporciona el siguientewing tipos de declaraciones en 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