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 processual. Foi criado pela primeira vez por John Osterhout em 1989. O objetivo do desenvolvimento desta linguagem são aplicativos inti () facilmente incorporados. A linguagem é comumente usada para GUIs e testes. Por exemplo, prototipagem rápida, Ensaios 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

No Tcl, a barra invertida é usada para escapar de caracteres especiais, bem como para espalhar comandos longos por múltiplas 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

- Subtrai 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 Loop permite executar uma instrução ou grupo de instruções várias vezes. Tcl fornece os seguintes tipos de instruções de loop.

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