Výukový program TCL TK: Jazyk příkazů nástroje
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é byl vytvořen Johnem Osterhoutem v roce 1989. Účelem vývoje tohoto jazyka je snadné zabudování inti ( ) aplikací. Jazyk se běžně používá pro GUI a testování. Například rychlé prototypování, Testování interakce s databází atd. V TCL je ve výchozím nastavení vše řetězec.
V tomto tutoriálu se naučíte-
- Co je TCL
- Jak provést TCL
- TCL skripty
- Typ substituce TCL
- Proměnná TCL
- TCL výraz a OperaTor
- Řízení toku TCL a rozhodování
Jak provést TCL
Existují dva způsoby, jak spustit kód TCL
- Windows založená aplikace je k dispozici zde tcltutor exe soubor
- 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
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 tisku zpráv do konzole. Syntaxe puts je níže
klade?-nonový řádek? ?channelId? tětiva
- Žá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í
- Náhrada příkazů
- Variabilní substituce
- 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 mezi hranatými závorkami. Výsledky jsou vráceny ”expr” použité pro provedení aritmetického výpočtu.
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 zpětné lomítko používá pro escapování speciálních znaků 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 můžete vidět speciální znak „ “, který zůstává za zpětným lomítkem.
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 uložena hodnota.
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 uvedeno výše. Příkaz unset se používá ke zničení proměnné. Příkaz „info existuje“ vrátí 1, pokud varName existuje jako proměnná (nebo prvek pole) v aktuálním kontextu, jinak vrátí 0. (viz příklad níže).
V TCL existují různé „info“ příkazy jako „info existuje“, „informační funkce“, „informační globální“ a tak dále. Zde uvidíme příklad „informace existují“.
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 dohromady, aby se staly 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 ve složených závorkách jsou předány příkazu přesně tak, jak jsou napsány.
Některé body k zapamatování
- Proměnná substituce není povolena v {} složených závorkách
- 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ého příkazu. Jednoduše řečeno, výstup jednoho příkazu předán jako argument jinému příkazu. Hranaté závorky se používají k definování bloku, který je spuštěn PŘED zbytkem příkazu na aktuálním řádku a výsledek je dosazen 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á argv0 a 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 do prava |
| logický OperaTor | && || ! | Zleva do prava |
| Bitové OperaTor | & | ^ ~ | Zleva do prava |
| Trojice OperaTor | ?: | Zprava doleva |
| Shift OperaTor | << >> | Zleva do prava |
| Porovnání řetězců OperaTor | ekv ne | Zleva do prava |
| Exponentiace OperaTor | ** | Zleva do prava |
| Seznam OperaTor | V ni | Zleva do prava |
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
- Odečte dva 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 jakéhokoli výrazu. Zde ve výstupu můžete vidět, že hodnota 'a' se nyní stala 1 z 0. Zatímco hodnota 'b' se stala 0 z 1.
%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ání řetězců porovnává hodnotu 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 požadovaná hodnota nalezne 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 ... prohlášení
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
Pokud ... jinak prohlášení
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říklad: V následujícím příkladu je hodnota a 100 a se stejným kódem přepneme příkaz na jinou hodnotu b je 200. Out zobrazí hodnotu 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 Loop umožňuje provést příkaz nebo skupinu příkazů vícekrát. Tcl poskytuje následující typy cyklických příkazů.
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' bude zvýšena o 1 až do maximální hodnoty (<12).
Pro velení
Provádí sekvenci příkazů vícekrát na základě hodnoty čítače. Při každém opakování smyčky se automaticky zvyšuje nebo snižuje.
Syntax :-
For {start} {test} {next} {
Body
}
Příklad: V níže uvedeném příkladu je hodnota 'i' nastavena na 0 a zvyšována až do hodnoty <5.
#!/usr/bin/tclsh
for {set i 0} {$i < 5} {incr i} {
put $i
}
Výstup:-
0 1 2 3 4
Shrnutí:
- TCL je skriptovací jazyk založený na řetězcích a také procedurální jazyk
- Jazyk se běžně používá pro GUI a testování
- V TCL je ve výchozím nastavení vše řetězec
- TCL je shellová aplikace, která čte příkaz TCL ze svého standardního vstupu nebo ze souboru a poskytuje požadované výsledky.
- Program TCL by měl mít příponu .tcl
