Výukový program Tcl/Tk

⚡ Chytré shrnutí

TCL (Tool Command Language) je skriptovací a procedurální jazyk založený na řetězcích, který vytvořil John Osterhout v roce 1989 a je široce používán pro grafická uživatelská rozhraní a rychlý prototyp.pinga testování, kde je každá hodnota ve výchozím nastavení považována za řetězec.

  • 🧵 Definice TCL: Skriptovací a procedurální jazyk založený na řetězcích, kde je vše ve výchozím nastavení řetězec.
  • ▶ </ s> Provedení: Spouštění Tcl skriptů přes shell tclsh na Windows nebo Linux se soubory s příponou .tcl.
  • 🔄 Náhrada: Podporuje substituci příkazů (hranaté závorky), proměnných ($) a zpětného lomítka.
  • ???? Proměnné: Vytvořeno pomocí set, přečteno pomocí $, odstraněno pomocí unset a zkontrolováno pomocí info exists.
  • Výrazy: Příkaz expr vyhodnocuje aritmetické, relační, logické, bitové a další operátory.
  • 🔀 Řízení toku: Poskytuje operace if/else, switch, while a for pro rozhodování a smyčky.

Výukový program TCL/Tk

Co je TCL?

TCL je shellová aplikace, která čte příkaz TCL ze svého standardního vstupu nebo ze souboru a poskytuje požadované výsledky.

TCL je skriptovací jazyk založený na řetězcích a také procedurální jazyk. Poprvé jej vytvořil John Osterhout v roce 1989. Účelem vývoje...ping Tento jazyk se snadno začleňuje do aplikací. Jazyk se běžně používá pro grafická uživatelská rozhraní a testování. Například pro rychlé prototypování.ping, Testování interakce s databází atd. V TCL je ve výchozím nastavení vše řetězec.

Jak provést TCL

Existují dva způsoby, jak spustit kód TCL:

  1. Windows založená aplikace je k dispozici zde tcltutor exe soubor
  2. Aplikace založená na Linuxu

In Linux interaktivního tlumočníka, můžeme spouštět TCL skripty, jak je uvedeno níže

Chcete-li získat přístup k interaktivní relaci TCL, proveďte následující příkaz

Kurz TCL: Jazyk příkazů nástroje

TCL skripty

Program TCL by měl mít příponu .tcl. Každý skript v UNIX/LINUX začíná cestou shellu TCL

#!/usr/bin/tclsh

Příklad:-

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

Výstup: Ahoj světe

V TCL se příkaz „Puts“ používá k výpisu zpráv do konzole. Syntaxe příkazu puts je uvedena níže.

vloží ?-nonewline? ?channelId? řetězec

  • Žádný nový řádek: Tento volitelný parametr potlačuje znak nového řádku ve výchozím příkazu. Ke každému řetězci vloží nový řádek
  • Channelid: Tento parametr se používá pro standardní vstupní kanál (stdin) a standardní výstupní kanál (stdout).

Příklad:-

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

Typ substituce TCL

V TCL existují tři druhy substitucí

  1. Náhrada příkazů
  2. Variabilní substituce
  3. Náhrada zpětného lomítka

Pojďme studovat jeden po druhém

Náhrada příkazů

Hranaté závorky se používají pro nahrazení příkazů.

Příklad:-

% puts [expr 1*3]
% 3

Zde se nejprve vyhodnotí příkaz v hranatých závorkách. Vrátí se výsledek. Pro provedení aritmetického výpočtu se použije „expr“.

Variabilní substituce

TCL provádí variabilní substituci pomocí $ podepsat.

Příklad:-

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

Zde vytvoříme proměnnou s názvem „a“ a nastavíme jí hodnotu „10“.

  • vloží a : Do konzole vypíše řetězec „a“, ale nikoli hodnotu „a“.
  • vloží $a : Vypíše hodnotu 'a' do konzole

Pojďme to provést a ověřit. Získáte výstup, jak je uvedeno níže.

$ ./substitution.tcl

a

10

Náhrada zpětného lomítka

V Tcl se pro esca používá zpětné lomítko.ping speciální znaky a také pro rozložení dlouhých příkazů na více řádků. Jakýkoli znak bezprostředně následující za zpětným lomítkem zůstane bez náhrady. V níže uvedeném příkladu vidíte, že za zpětným lomítkem zůstává speciální znak „ “.

Ověřte si to na příkladu

#!/usr/bin/tclsh

puts "This  is my  \"car\""

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

POZNÁMKA: -Pro komentář libovolného řetězce v TCL se používá „#“. Všechny znaky za „#“ jsou příkazem shellu tclsh ignorovány.

Proměnná TCL

Proměnná je identifikátor, který obsahuje hodnotu. Jinými slovy, proměnná je odkaz na paměť počítače, kde je hodnota uložena.

Proměnné jsou vytvářeny „příkazem set“ a všechny názvy proměnných rozlišují velká a malá písmena. Znamená to ahoj, ahoj, ahoj, každý je v TCL jiný. Podívejte se na nějaký příklad proměnné citlivé na malá a velká písmena.

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

Výstup:-

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

Vytváření proměnných TCL

Chcete-li vytvořit proměnné v TCL, musíte použít "soubor" příkaz

Nastavte 10

Chcete-li získat hodnotu proměnné, musíte použít symbol „$“.

% vložte $a

10%

Takže dostaneme hodnotu proměnné 'a' jako 10.

Informace o příkazu TCL existují

Příkaz „set“ se používá k vytváření a čtení proměnných, jak je znázorněno výše. Příkaz unset se používá ke zničení proměnné. Příkaz „info exists“ vrací 1, pokud proměnná varName existuje jako proměnná (nebo prvek pole) v aktuálním kontextu, jinak vrací 0. (viz příklad níže).

V TCL existuje řada příkazů „info“, například „info existuje“, „info funkce“, „info global“ atd. Zde uvidíme příklad příkazu „info existuje“.

Příklad:-

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

Různá rovnátka a jejich chování

{} -> Složené závorky

Složené závorky v TCL seskupují slova a stávají se argumenty. Složené závorky se používají k definování bloku, který je odložen – jinými slovy, může být spuštěn PO zbytku příkazu na aktuálním řádku. Znaky uvnitř závorek se předávají příkazu přesně tak, jak jsou zapsány.

Některé body k zapamatování

  1. Proměnná substituce není povolena v {} složených závorkách
  2. Slouží k vytvoření datového typu seznamu

Příklad:-

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

%set number {1 2 3 4 5} -> Zde number je datový typ seznamu

%vloží $číslo

%1 2 3 4 5

[] -> hranaté závorky

Hranaté závorky se používají k vytvoření vnořených příkazů. Jednoduše řečeno, výstup jednoho příkazu předaný jako argument jinému příkazu. Hranaté závorky se používají k definování bloku, který se spustí PŘED zbytkem příkazu na aktuálním řádku a výsledek se dosadí do řádku.

Příklad: –

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

() -> kulatá rovnátka

Tento příkaz se používá k vytvoření datového typu pole a také k označení priority operátorů.

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

Zde je „a“ pole s hodnotami 10 a 20. Viz níže uvedené příkazy pro tisk klíčů, párů klíč-hodnota a hodnot pole.

% 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

Pro tisk „N-té“ hodnoty pole a použijeme Puts $a(N)

TCL Argumenty příkazového řádku

Položky dat předávané skriptu z příkazového řádku jsou známé jako argumenty. Počet argumentů příkazového řádku skriptu Tcl je předán jako globální proměnná argc. Název skriptu Tcl je předán skriptu jako globální proměnná argv0a zbytek argumentů příkazového řádku je předán jako seznam v argv.

TCL má 3 předdefinované proměnné jako např

$argc   -> indicates the number of arguments passed to the script

$argv   -> indicates list of arguments

$argv0  -> indicates the name of script

Příklad:–

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

výstup:-

  • Počet argumentů předávaných skriptům: 3
  • Seznam argumentů je předán skriptu: 10 20 30
  • Název skriptu je: arg-script.tcl

TCL výraz a OperaTor

Výraz je sestaven z operandů a operátorů. Vyhodnocuje se příkazem „expr“. Operatory jsou hodnoceny na základě priority a asociativnosti. Jazyk TCL má vestavěné operátory, jak je uvedeno níže

OperaKategorie Tor Symbol Přednost/Asociativita
Aritmetický OperaTor + – * / % Zleva doprava
Relační OperaTor == != < > <= >= Zleva doprava
logický OperaTor && || ! Zleva doprava
Bitové OperaTor & | ^ ~ Zleva doprava
Trojice OperaTor ?: Zprava doleva
Shift OperaTor << >> Zleva doprava
Porovnání řetězců OperaTor rovnice ne Zleva doprava
Exponentiace OperaTor ** Zleva doprava
Seznam OperaTor V ni Zleva doprava

Aritmetický OperaTor

TCL výraz se skládá z kombinace operandů, operátorů a závorek. Podívejme se na příklad aritmetických operátorů v TCL

+ Přidejte dva nebo více operandů

Příklad:-

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

– Podřízenýtracdva nebo více operandů

Příklad:-

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

*Vynásobte dva nebo více operandů

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

/ Dělit čitatele jmenovatelem

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

Operátor modulu % dělí čitatel po číslovači, ale vrací připomenutí

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

Relační OperaTor

Zkontroluje, zda je hodnota levého operandu větší než hodnota pravého operandu. Pokud ano, pak se podmínka stane pravdivou a vrátí 1, jinak vrátí 0.

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

Zkontrolujte, zda je hodnota levého operandu menší než hodnota pravého operandu. Pokud ano, pak se podmínka stane pravdivou a vrátí 1, jinak vrátí 0

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

>= Zkontroluje, zda je hodnota levého operandu větší nebo rovna hodnotě pravého operandu, pokud ano, podmínka se stane pravdivou a vrátí 1 jinak vrátí 0

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

<= Zkontroluje, zda je hodnota levého operandu menší nebo rovna hodnotě pravého operandu, pokud ano, podmínka se stane pravdivou a vrátí 1 jinak vrátí 0

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

!= Zkontroluje, zda jsou hodnoty dvou operandů stejné nebo ne, pokud se hodnoty nerovnají, podmínka se stane pravdivou a vrátí 1, jinak vrátí 0

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

== Zkontroluje, zda jsou hodnoty dvou operandů stejné nebo ne, pokud ano, podmínka se stane pravdivou a vrátí 1 jinak vrátí 0

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

logický OperaTor

&& Pokud jsou oba operandy nenulové, pak se podmínka stane pravdivou a vrátí 1, jinak vrátí 0

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

|| Pokud je některý ze dvou operandů nenulový, podmínka se stane pravdivou a vrátí 1, jinak vrátí 0

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

! Používá se k obrácení výsledku libovolného výrazu. Zde na výstupu vidíte, že hodnota 'a' se nyní změnila z 0 na 1. Zatímco hodnota 'b' se změnila z 1 na 0.

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

Bitové OperaTor

& (bitově a) proveďte bit po bitu a postupujte podle níže uvedené tabulky.

A B A & B
0 0 0
0 1 0
1 1 1
1 0 0

Příklad:-

%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

| (bitově nebo) proveďte bit po bitu a postupujte podle níže uvedené tabulky

A B A | B
0 0 0
0 1 1
1 1 1
1 0 1

Příklad:-

%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

^ (bez bitů nebo) proveďte bit po bitu operaci a postupujte podle níže uvedené tabulky

A B A ^ B
0 0 0
0 1 1
1 1 0
1 0 1

Příklad:-

%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

~ (bitová negace) operátor mění každou 1 na 0 a 0 na 1, postupujte podle tabulky jako reference

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

Trojice Operator (? :)

Syntaxe je

condition-expression?  expression_1: expression_2

Pokud je podmínka-exp pravdivá, vyhodnotí se exp1 a vrátí se výsledek. Pokud je cond-exp nepravda, vyhodnotí se exp2 a vrátí se jeho výsledek. V našem příkladu platí exp1, protože hodnota A je větší než 6.

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

Shift OperaTor

Shift operátor je označen buď operátorem << levý posuvný operátor, nebo operátorem >> pravého posuvu. Pro operátor posunu << vlevo se hodnota levého operandu posune doleva o počet bitů zadaný pravým operandem.

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

Pro operátor posunu >> vpravo se hodnota levého operandu posune doprava o počet bitů zadaný pravým operandem.

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

Porovnání řetězců OperaTor

Operátor porovnávání řetězců porovnává hodnoty obou operandů. Pokud jsou hodnoty operandu stejné, vrátí 1, jinak vrátí 0. V příkladu je hodnota pro A i B 7, proto výsledek vrátí 1.

Příklad:-

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

Ne (pokud jsou hodnoty obou operandů různé, vrátí 1, jinak vrátí 0)

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

Operátor umocňování

Pow () a ** jsou stejné. Vždy vrací plovoucí hodnotu.

** označuje výkon požadovaného operandu.

Příklad:-

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

Seznam OperaTor

Pokud se požadovaná hodnota nachází v definovaném seznamu, vrátí 1, jinak vrátí 0. V příkladu hodnota 1 existuje v proměnné 'a', proto vrátí 1.

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

ni, pokud je požadovaná hodnota nalezena v definovaném seznamu, vrátí 0, jinak vrátí 1.

Příklad:-

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

Řízení toku TCL a rozhodování

Existují různé příkazy pro řízení toku a rozhodování, které se používají ke změně toku programu. Spouštění programu vždy začíná od horní části zdrojového souboru dolů.

Příkaz if se skládá z booleovských výrazů následovaných jedním nebo více příkazy.

Pokud … výrok

Syntax:-

pokud expr ?tak? tělo

pokud je výraz vyhodnocen jako true, pak se tělo příkazu provede.

Příklad:-

set age 10

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

Output: Age is less than 20

Příkaz If … else

Syntaxe:-

Pokud výraz? pak body_1 jinak body_2

Pokud je výraz vyhodnocen jako true, vrátí body_1, jinak vrátí body_2

Příklad:–

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

Vnořený příkaz if..else

Znamená to, že jeden příkaz if nebo else..if lze vložit do jiného příkazu if nebo else..if.

Syntax:-

If  {expression_1} {
Body_1
If {expression_2} {
Body_2
}
}

Příklad:–

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

Přepnout příkaz

Příkaz switch umožňuje testovat proměnnou na rovnost se seznamem hodnot. Vyhodnotí seznam hodnot a vrátí výsledek tohoto vyhodnocení. Pokud neodpovídají žádné hodnoty, vrátí se výchozí hodnoty.

Příklad:

#!/usr/bin/tclsh

# switch_cmd.tcl

set domain x
switch $domain {

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

Vnořený spínač

Vnořený příkaz switch znamená příkaz switch uvnitř příkazu switch.

Syntax :-

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

PříkladV následujícím příkladu je hodnota a 100 a se stejným kódem přepneme příkaz pro jinou hodnotu b, která je 200. Výpis zobrazí hodnoty pro a i 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"
        }
     }
   }
}

Výstup:-

Hodnota a je 100

Hodnota b je 200

Příkaz TCL Loop

Příkaz smyčky umožňuje opakované provedení příkazu nebo skupiny příkazů. Tcl poskytuje následující typy smyček.ping prohlášení.

Zatímco příkaz

Když je daná podmínka pravdivá, opakuje se příkaz nebo skupina příkazů, které jsou v těle smyčky.

Syntax:

While  {condition} {
    Statements
}

Příklad:-

#!/usr/bin/tclsh

Set a 10

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

Výstup:-

a je 10

a je 11

Ve výše uvedeném příkladu je použit vestavěný příkaz „incr“. To znamená, že hodnota „a“ se bude zvyšovat o 1 až do maximální hodnoty (<12).

Pro velení

Provede sekvenci příkazů několikrát na základě hodnoty čítače. Tato hodnota se automaticky zvyšuje nebo snižuje během každého opakování smyčky.

Syntax :-

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

PříkladV níže uvedeném příkladu je hodnota 'i' nastavena na 0 a inkrementována, dokud hodnota nedosáhne <5.

#!/usr/bin/tclsh

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

Výstup:-

0
1
2
3
4

Nejčastější dotazy

Ano. Tcl se stále používá pro automatizaci, testování, nástroje EDA, skriptování síťových zařízení a vkládání do aplikací. Nástroj Expect a mnoho testovacích frameworků se na Tcl spoléhají, i když je méně běžný pro nové webové aplikace.

Tcl je skriptovací jazyk, zatímco Tk je jeho doprovodná grafická sada nástrojů pro tvorbu grafických uživatelských rozhraní. Společně jako Tcl/Tk umožňují psát multiplatformní desktopové aplikace s jednoduchými příkazy.

Příkaz expr vyhodnocuje matematické a logické výrazy v Tcl. Protože Tcl považuje vše za řetězec, je expr nutný k provádění aritmetických, porovnávacích a booleovských operací.

Asistenti s umělou inteligencí dokáží generovat kód Tcl, vysvětlovat příkazy jako set, puts a expr, převádět pseudokód do Tcl a ladit syntaktické chyby, helping Začátečníci se jazyk učí rychleji.

Ano. Nástroje umělé inteligence dokáží překládat skripty Tcl do jazyků jako například Python nebo Perl, mapaping příkazy a řídicí struktury, ačkoli vývojáři by měli zkontrolovat správnost výstupu.

Shrňte tento příspěvek takto: