Tutorial TCL TK: linguagem de comando de ferramenta

O que รฉ TCL?

TCL รฉ um aplicativo shell que lรช o comando TCL de sua entrada padrรฃo ou de um arquivo e fornece os resultados desejados.

TCL รฉ uma linguagem de script baseada em strings e tambรฉm uma linguagem procedural. Foi criada por John Osterhout em 1989. O objetivo do desenvolvimento รฉ...ping Esta linguagem รฉ fรกcil de incorporar em aplicaรงรตes ( ). A linguagem รฉ comumente usada para GUIs e testes. Por exemplo, prototipagem rรกpida.ping, Testes interaรงรฃo com banco de dados, etc. No TCL, por padrรฃo, tudo รฉ uma string.

Neste tutorial, vocรช aprenderรก

Como executar o TCL

Existem duas maneiras de executar o cรณdigo TCL

  1. Windows aplicativo baseado estรก disponรญvel aqui arquivo tcltutorexe
  2. Aplicativo baseado em Linux

In Linux interpretador interativo, podemos executar os scripts TCL conforme abaixo

Para acessar a sessรฃo interativa TCL, execute o seguinte comando

Tutorial TCL: linguagem de comando de ferramenta

Scripts TCL

O programa TCL deve ter uma extensรฃo .tcl. Cada script no UNIX/LINUX comeรงa com o caminho do shell TCL

#!/usr/bin/tclsh

Exemplo:-

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

saรญda: Olรก Mundo

No TCL, o comando โ€œPutsโ€ รฉ usado para imprimir mensagens no console. A sintaxe de puts estรก abaixo

coloca?-nonewline? ?canalId? corda

  • Nenhuma nova linha: este parรขmetro opcional suprime o caractere de nova linha por comando padrรฃo. Ele coloca uma nova linha para cada string
  • ID do canal: Este parรขmetro รฉ usado para canal de entrada padrรฃo (stdin) e canal de saรญda padrรฃo (stdout).

Ex:-

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

Tipo de substituiรงรฃo TCL

Existem trรชs tipos de substituiรงรตes no TCL

  1. Substituiรงรฃo de comando
  2. Substituiรงรฃo de variรกvel
  3. substituiรงรฃo de barra invertida

Vamos estudar um por um

Substituiรงรฃo de comando

Colchetes sรฃo usados โ€‹โ€‹para substituiรงรฃo de comandos.

Exemplo:-

% puts [expr 1*3]
% 3

Aqui o comando entre colchetes รฉ avaliado primeiro. O resultado รฉ retornado .โ€exprโ€ usado para realizar o cรกlculo aritmรฉtico.

Substituiรงรฃo de variรกvel

TCL realiza substituiรงรฃo de variรกveis โ€‹โ€‹com a ajuda de $ placa.

Exemplo:-

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

Aqui criamos uma variรกvel chamada โ€œaโ€ e definimos o valor โ€œ10โ€ para ela.

  • coloca a: imprimirรก a string โ€œaโ€, mas nรฃo o valor de 'a' no console
  • puts $a : Irรก imprimir o valor de 'a' no console

Vamos executar e verificar. Vocรช obterรก a saรญda conforme abaixo.

$ ./substitution.tcl

a

10

substituiรงรฃo de barra invertida

Em Tcl, a barra invertida รฉ usada para escapar.ping Caracteres especiais, bem como para distribuir comandos longos por vรกrias linhas. Qualquer caractere imediatamente apรณs a barra invertida permanecerรก sem substituiรงรฃo. No exemplo abaixo, vocรช pode ver o caractere especial โ€œ โ€œ, permanece apรณs a barra invertida.

Vamos verificar isso com um exemplo

#!/usr/bin/tclsh

puts "This  is my  \"car\"

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

NOTA: -Para comentar qualquer string em TCL รฉ usado โ€œ#โ€. Todos os caracteres apรณs โ€œ#โ€ sรฃo ignorados pelo comando shell tclsh.

Variรกvel TCL

Uma variรกvel รฉ um identificador que contรฉm um valor. Em outras palavras, uma variรกvel รฉ uma referรชncia ร  memรณria do computador, onde o valor รฉ armazenado.

As variรกveis โ€‹โ€‹sรฃo criadas pelo โ€œcomando setโ€ e todos os nomes de variรกveis โ€‹โ€‹diferenciam maiรบsculas de minรบsculas. Significa olรก, olรก, OLร, todos sรฃo diferentes no TCL. Veja algum exemplo de variรกvel que diferencia maiรบsculas de minรบsculas.

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

Resultado:-

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

Criando Variรกveis โ€‹โ€‹TCL

Para criar variรกveis โ€‹โ€‹em TCL, vocรช precisa usar "definir" comando

conjunto de 10

Para obter o valor da variรกvel deve-se usar o sรญmbolo โ€œ$โ€ como

% colocar $a

10%

Portanto, obtemos o valor da variรกvel 'a' como 10.

Existem informaรงรตes de comando TCL

O comando โ€œsetโ€ รฉ usado para criar e ler variรกveis โ€‹โ€‹conforme mostrado acima. O comando unset รฉ usado para destruir uma variรกvel. O comando โ€œinfo existโ€ retorna 1 se varName existir como uma variรกvel (ou um elemento de array) no contexto atual, caso contrรกrio retorna 0. (veja o exemplo abaixo).

Existem vรกrios comandos โ€œinfoโ€ no TCL, como โ€œinformaรงรตes existemโ€, โ€œfunรงรตes de informaรงรตesโ€, โ€œinformaรงรตes globaisโ€ e assim por diante. Aqui veremos um exemplo de โ€œinformaรงรตes existemโ€.

Ex:-

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

Diferentes aparelhos e seu comportamento

{} -> Chaves

Chaves em TCL agrupam palavras para se tornarem argumentos. Chaves sรฃo usadas para definir um bloco que รฉ adiado โ€“ em outras palavras, ele pode ser executado APร“S o restante do comando na linha atual. Os caracteres entre colchetes sรฃo passados โ€‹โ€‹para um comando exatamente como estรฃo escritos.

Alguns pontos para lembrar

  1. A substituiรงรฃo de variรกveis โ€‹โ€‹nรฃo รฉ permitida entre {} colchetes
  2. ร‰ usado para criar o tipo de dados de lista

Exemplo:-

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

%set number {1 2 3 4 5} -> Aqui number รฉ um tipo de dados de lista

%coloca $nรบmero

% 1 2 3 4 5

[] -> colchetes

Colchetes sรฃo usados โ€‹โ€‹para criar comandos aninhados. Simplificando, a saรญda de um comando รฉ passada como argumento para outro comando. Colchetes sรฃo usados โ€‹โ€‹para definir um bloco que รฉ executado ANTES do resto do comando na linha atual, e o resultado รฉ substituรญdo na linha.

Exemplo: โ€“

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

() -> colchetes redondos

Este comando รฉ usado para criar o tipo de dados array e tambรฉm indicar a precedรชncia do operador.

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

Aqui โ€œaโ€ รฉ um array com valores 10 e 20. Veja abaixo os comandos para imprimir chaves, pares de valores-chave e valores do array.

% 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 o โ€œenรฉsimoโ€ valor do array a, usaremos Puts $a(N)

Argumentos de linha de comando TCL

Itens de dados passados โ€‹โ€‹para um script a partir da linha de comando sรฃo conhecidos como argumentos. O nรบmero de argumentos de linha de comando para um script Tcl รฉ passado como variรกvel global argumento . O nome de um script Tcl รฉ passado para o script como a variรกvel global argv0 , e o restante dos argumentos da linha de comando sรฃo passados โ€‹โ€‹como uma lista em argumento.

TCL tem 3 variรกveis โ€‹โ€‹โ€‹โ€‹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

saรญda:-

  • Nรบmero de argumentos passados โ€‹โ€‹para os scripts: 3
  • Lista de argumentos passados โ€‹โ€‹para o script: 10 20 30
  • O nome do script รฉ: arg-script.tcl

Expressรฃo TCL e Operator

Expressรฃo รฉ construรญda a partir de operandos e operadores. ร‰ avaliada com o comando "expr". OperaOs operadores sรฃo avaliados com base na precedรชncia e associatividade. A linguagem TCL possui operadores integrados conforme abaixo

Operacategoria Sรญmbolo Precedรชncia/Associatividade
Aritmรฉtica Operator + - * /% Esquerda para a Direita
Relacional Operator == != < > <= >= Da esquerda para direita
lรณgico Operator && || ! Da esquerda para direita
Bit a bit Operator & | ^ ~ Da esquerda para direita
Ternรกrio Operator ?: Direita para esquerda
Shift Operator << >> Da esquerda para direita
Comparaรงรฃo de Strings Operator eq nรฃo Da esquerda para direita
Exponenciaรงรฃo Operator ** Da esquerda para direita
Lista Operator Em nenhum Da esquerda para direita

Aritmรฉtica Operator

Uma expressรฃo TCL consiste em uma combinaรงรฃo de operandos, operadores e parรชnteses. Vejamos um exemplo de operadores aritmรฉticos em TCL

+ Adicione dois ou mais operandos

Ex:-

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

- Subtracts dois ou mais operandos

Ex:-

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

*Multiplique dois ou mais operandos

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

/ Divida numerador por denumerador

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

O operador % Mรณdulo divide numerador por denumerador, mas retorna lembrete

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

Relacional Operator

Verifica se o valor do operando esquerdo รฉ maior que o valor do operando direito. Se sim, entรฃo a condiรงรฃo se torna verdadeira e retorna 1, caso contrรกrio retorna 0.

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

Verifique se o valor do operando esquerdo รฉ menor que o valor do operando direito. Se sim, entรฃo a condiรงรฃo se torna verdadeira e retorna 1, caso contrรกrio retorna 0

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

>= Verifica se o valor do operando esquerdo รฉ maior ou igual ao valor do operando direito, se sim entรฃo a condiรงรฃo se torna verdadeira e retorna 1, caso contrรกrio retorna 0

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

<= Verifica se o valor do operando esquerdo รฉ menor ou igual ao valor do operando direito, se sim, a condiรงรฃo se torna verdadeira e retorna 1, caso contrรกrio, retorna 0

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

!= Verifica se os valores de dois operandos sรฃo iguais ou nรฃo, se os valores nรฃo forem iguais entรฃo a condiรงรฃo se torna verdadeira e retorna 1, caso contrรกrio retorna 0

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

== Verifica se os valores de dois operandos sรฃo iguais ou nรฃo, se sim entรฃo a condiรงรฃo se torna verdadeira e retorna 1, caso contrรกrio retorna 0

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

lรณgico Operator

&& Se ambos os operandos forem diferentes de zero, a condiรงรฃo se tornarรก verdadeira e retornarรก 1, caso contrรกrio, retornarรก 0

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

|| Se qualquer um dos dois operandos for diferente de zero, a condiรงรฃo se tornarรก verdadeira e retornarรก 1, caso contrรกrio, retornarรก 0

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

! Usado para reverter o resultado de qualquer expressรฃo. Aqui na saรญda, vocรช pode ver que o valor de 'a' agora passou de 1 para 0. Enquanto o valor de 'b' passou de 0 para 1.

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

Bit a bit Operator

& (bit a bit e) executa a operaรงรฃo bit a bit e segue a tabela abaixo para operaรงรฃo.

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 a bit ou) execute a operaรงรฃo bit a bit e siga a tabela abaixo

A B Um | 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 

^ (exclusivo bit a bit ou) execute a operaรงรฃo bit a bit e siga a tabela abaixo

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

O operador ~ (negaรงรฃo bit a bit) muda a cada 1 para 0 e 0 para 1, siga a tabela como referรชncia

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

Ternรกrio Operator (?:)

Sintaxe รฉ

condition-expression?  expression_1: expression_2

Se a condiรงรฃo-exp for verdadeira, exp1 serรก avaliada e o resultado serรก retornado. Se cond-exp for falso, exp2 รฉ avaliado e seu resultado รฉ retornado. No nosso exemplo, exp1 รฉ verdadeiro porque o valor de A รฉ maior que 6.

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

Shift Operator

Shift operador รฉ denotado pelo operador << deslocamento para a esquerda ou pelo operador >> deslocamento para a direita. Para o operador << deslocamento para a esquerda, o valor dos operandos da esquerda รฉ movido para a esquerda pelo nรบmero de bits especificado pelo operando da direita.

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

Para o operador >> right shift, o valor dos operandos esquerdos รฉ movido para a direita pelo nรบmero de bits especificado pelo operando direito.

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

Comparaรงรฃo de Strings Operator

O operador de comparaรงรฃo de strings compara o valor de ambos os operandos. Se o valor do operando for o mesmo, ele retornarรก 1, caso contrรกrio, retornarรก 0. No exemplo, o valor para A e B รฉ 7, portanto, o resultado retornarรก 1.

Ex:-

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

Ne (se o valor de ambos os operandos for diferente, ele retornarรก 1, caso contrรกrio, retornarรก 0)

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

Operador de exponenciaรงรฃo

Pow() e ** ambos sรฃo iguais. Ele sempre retorna um valor flutuante.

** indica a potรชncia do operando desejado.

Ex:-

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

Lista Operator

Se o valor necessรกrio for encontrado na lista definida, ele retornarรก 1, caso contrรกrio, retornarรก 0. No exemplo, o valor 1 existe na variรกvel 'a', portanto, retornarรก 1.

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

ni, se o valor necessรกrio for encontrado na lista definida, ele retornarรก 0, caso contrรกrio, retornarรก 1.

Ex:-

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

Controle de fluxo TCL e tomada de decisรฃo

Existem vรกrios comandos de controle de fluxo e tomada de decisรฃo que sรฃo usados โ€‹โ€‹para alterar o fluxo de um programa. As execuรงรตes do programa sempre comeรงam do inรญcio ao fim do arquivo de origem.

A instruรงรฃo If consiste em uma expressรฃo booleana seguida por uma ou mais instruรงรตes.

Se ... declaraรงรฃo

Sintaxe:-

se expr ?entรฃo? corpo

se expr for avaliado como verdadeiro, o corpo do comando serรก executado.

Ex:-

set age 10

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

Output: Age is less than 20

Declaraรงรฃo If...else

Sintaxe:-

Se expressรฃo? entรฃo corpo_1 senรฃo corpo_2

Se a expressรฃo for avaliada como verdadeira, ela retornarรก body_1, caso contrรกrio, retornarรก 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

Instruรงรฃo if..else aninhada

Isso significa que uma instruรงรฃo if ou else..if pode ser colocada dentro de outra instruรงรฃo if ou else..if.

Sintaxe:-

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

Declaraรงรฃo de mudanรงa

A instruรงรฃo switch permite que uma variรกvel seja testada quanto ร  igualdade em relaรงรฃo a uma lista de valores. Avalia a lista de valores e retorna o resultado dessa avaliaรงรฃo. Se nenhum valor corresponder, os valores padrรฃo serรฃo retornados.

Exemplo:

#!/usr/bin/tclsh

# switch_cmd.tcl

set domain x
switch $domain {

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

Interruptor aninhado

Instruรงรฃo switch aninhada significa instruรงรฃo switch dentro de uma instruรงรฃo switch.

Sintaxe :-

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

Exemplo: No exemplo a seguir, o valor de a รฉ 100, e com o mesmo cรณdigo trocamos a instruรงรฃo para outro valor de b รฉ 200. A saรญda mostrarรก o valor para a e 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"
        }
     }
   }   
}

Resultado:-

O valor de a รฉ 100

O valor de b รฉ 200

Instruรงรฃo de loop TCL

A instruรงรฃo de loop permite executar uma instruรงรฃo ou um grupo de instruรงรตes vรกrias vezes. O Tcl fornece os seguintes tipos de loop:ping declaraรงรฃo.

Enquanto comando

Quando uma determinada condiรงรฃo รฉ verdadeira, uma instruรงรฃo ou grupo de instruรงรตes que estรฃo no corpo do loop se repete.

Sintaxe:

While  {condition} {
    Statements
}

Ex:-

#!/usr/bin/tclsh

Set a 10

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

Resultado:-

um รฉ 10

um รฉ 11

No exemplo acima, o comando interno โ€œincrโ€ รฉ usado. Isso significa que o valor de 'a' serรก aumentado em 1 atรฉ o valor mรกximo (<12).

Para comando

Ele executa uma sequรชncia de instruรงรตes mรบltiplas vezes com base em um valor de contador. ร‰ aumentado ou diminuรญdo automaticamente durante cada repetiรงรฃo do loop.

Sintaxe :-

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

Exemplo: No exemplo abaixo, o valor de 'i' รฉ definido como 0 e incrementado atรฉ o valor <5.

#!/usr/bin/tclsh

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

Resultado:-

0 
1 
2 
3 
4

Resumo:

  • TCL รฉ uma linguagem de script baseada em strings e tambรฉm uma linguagem processual
  • A linguagem รฉ comumente usada para GUIs e testes
  • No TCL por padrรฃo tudo รฉ string
  • TCL รฉ um aplicativo shell que lรช o comando TCL de sua entrada padrรฃo ou de um arquivo e fornece os resultados desejados.
  • O programa TCL deve ter extensรฃo .tcl

Resuma esta postagem com: