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รก
- O que รฉ TCL
- Como executar o TCL
- Scripts TCL
- Tipo de substituiรงรฃo TCL
- Variรกvel TCL
- Expressรฃo TCL e Operator
- Controle de fluxo TCL e tomada de decisรฃo
Como executar o TCL
Existem duas maneiras de executar o cรณdigo TCL
- Windows aplicativo baseado estรก disponรญvel aqui arquivo tcltutorexe
- 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

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
- Substituiรงรฃo de comando
- Substituiรงรฃo de variรกvel
- 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
- A substituiรงรฃo de variรกveis โโnรฃo รฉ permitida entre {} colchetes
- ร 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
