Урок по Tcl/Tk
⚡ Умно обобщение
TCL (Tool Command Language) е скриптов и процедурен език, базиран на низове, създаден от Джон Остерхаут през 1989 г., широко използван за графични потребителски интерфейси, бързо разработване на протоколи.pingи тестване, където всяка стойност се третира като низ по подразбиране.
Какво е TCL?
TCL е шел приложение, което чете TCL команда от стандартния си вход или от файл и дава желаните резултати.
TCL е скриптов език, базиран на низове, а също и процедурен език. Създаден е за първи път от Джон Остерхаут през 1989 г. Целта на разработкатаping Този език е лесен за вграждане в приложения. Езикът се използва често за графични потребителски интерфейси и тестване. Например, бързо създаване на прототипи.ping, Тестване взаимодействие с база данни и т.н. В TCL по подразбиране всичко е низ.
Как да изпълним TCL
Има два начина за изпълнение на TCL код:
- Windows базирано приложение е достъпно тук tcltutor exe файл
- Linux базирано приложение
In Linux интерактивен интерпретатор, можем да изпълним TCL скриптовете, както е показано по-долу
За достъп до интерактивната сесия на TCL изпълнете следната команда
TCL скриптове
TCL програмата трябва да има разширение .tcl. Всеки скрипт в UNIX/LINUX започва с TCL shell път
#!/usr/bin/tclsh
Пример:-
#!/usr/bin/tclsh Puts "Hello World" Script execution:- $ chmod +x helloworld.tcl $ ./helloworld.tcl
Продукция: Здравей свят
В TCL командата „Puts“ се използва за отпечатване на съобщения към конзолата. Синтаксисът на puts е показан по-долу.
поставя ?-nonewline? ?channelId? низ
- Без нов ред: Този незадължителен параметър потиска символа за нов ред по команда по подразбиране. Той поставя нов ред към всеки низ
- Channelid: Този параметър се използва за стандартен входен канал (stdin) и стандартен изходен канал (stdout).
Пр.:-
%puts "Hello World" % Hello World %puts stdout "Hello World" % Hello World
TCL Тип заместване
Има три вида замествания в TCL
- Подмяна на команди
- Променливо заместване
- Замяна на наклонена черта
Да учим един по един
Подмяна на команди
Квадратните скоби се използват за заместване на команда.
Пример:-
% puts [expr 1*3] % 3
Тук командата между квадратните скоби се оценява първо. Връщат се резултатите. „expr“ се използва за извършване на аритметичното изчисление.
Променливо заместване
TCL извършва заместване на променливи с помощта на $ знак.
Пример:-
#!/usr/bin/tclsh set a 10 puts a puts $a
Тук създаваме променлива, наречена „a“, и й задаваме стойност „10“.
- puts a : Ще отпечата низ „a“, но не и стойността на „a“ на конзолата
- puts $a : Ще отпечата стойността на 'a' на конзолата
Нека го изпълним и проверим. Ще получите резултата, както е показано по-долу.
$ ./substitution.tcl
a
10
Замяна на наклонена черта
В Tcl, обратната наклонена черта се използва за esc.ping специални символи, както и за разпределяне на дълги команди на няколко реда. Всеки символ непосредствено след обратната наклонена черта ще остане без заместване. В примера по-долу можете да видите, че специалният символ „ “ остава след обратната наклонена черта.
Нека проверим това с пример
#!/usr/bin/tclsh puts "This is my \"car\"" $ ./backslashsubstitution.tcl This is my "car"
ЗАБЕЛЕЖКА: -За коментиране на всеки низ в TCL се използва “#”. Всички знаци след “#” се игнорират от командата tclsh shell.
TCL променлива
Променливата е идентификатор, който съдържа стойност. С други думи, променливата е препратка към паметта на компютъра, където се съхранява стойността.
Променливите се създават чрез „команда set“ и всички имена на променливи са чувствителни към главни и малки букви. Това означава здравей, здравей, здравей всички са различни в TCL. Вижте пример за променлива, чувствителна към главни и малки букви.
% set name Techoit % set Name Technoit_1 % set NAME Technoit_2
Изход: -
% puts $name % Technoit %puts $Name %Technoit_1 %puts $NAME %Technoit_2
Създаване на TCL променливи
За да създадете променливи в TCL, трябва да използвате "комплект" команда
Задайте 10
За да получите стойността на променливата, трябва да използвате символа "$", като
% постави $a
% 10
Така че получаваме стойността на променливата 'a' като 10.
Съществува информация за TCL команда
Командата „set“ се използва за създаване и четене на променливи, както е показано по-горе. Командата unset се използва за унищожаване на променлива. Командата „info exists“ връща 1, ако varName съществува като променлива (или елемент от масив) в текущия контекст, в противен случай връща 0. (вижте примера по-долу).
В TCL има различни команди „info“, като „info exists“, „info functions“, „info global“ и т.н. Тук ще видим пример за „info exists“.
Пр.:-
% set a 20 % puts $a % 20 % puts [info exists a] % 1 % unset a %puts [info exists a] % 0
Различни брекети и тяхното поведение
{} -> Къдрави скоби
Къдравите скоби в TCL групират думите, за да се превърнат в аргументи. Къдравите скоби се използват за дефиниране на блок, който е отложен – с други думи, той може да бъде изпълнен СЛЕД останалата част от командата на текущия ред. Символите в скобите се предават на командата точно както са написани.
Някои точки, които трябва да запомните
- Не е позволено заместване на променлива в фигурни скоби {}
- Използва се за създаване на тип данни за списък
Пример:-
% set x 10 % puts {$x} % $x
%set number {1 2 3 4 5} -> Тук числото е тип данни от списък
% поставя $число
%1 2 3 4 5
[] -> квадратни скоби
Квадратните скоби се използват за създаване на вложени команди. Най-просто казано, изходът на една команда се предава като аргумент на друга команда. Квадратните скоби се използват за дефиниране на блок, който се изпълнява ПРЕДИ останалата част от командата на текущия ред, а резултатът се замества в реда.
Пример: –
% set x 10 % puts "y : [set y [set x 10]]" %y : 10 % puts "x : $x" %x : 10
() -> кръгли скоби
Тази команда се използва за създаване на тип данни за масив и също така за посочване на приоритет на оператора.
% set a(1) 10 % set a(2) 20
Тук „a“ е масив със стойност 10 и 20. Вижте командите по-долу за отпечатване на ключове, двойки ключ стойност и стойности на масива.
% 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
За отпечатване на „N-та“ стойност на масив a ще използваме Puts $a(N)
Аргументи на командния ред на TCL
Елементите от данни, предадени на скрипт от командния ред, са известни като аргументи. Броят на аргументите на командния ред към Tcl скрипт се предава като глобална променлива argc. Името на Tcl скрипт се предава на скрипта като глобална променлива argv0, а останалите аргументи на командния ред се предават като списък в argv.
TCL има 3 предварително дефинирани променливи, като напр
$argc -> indicates the number of arguments passed to the script $argv -> indicates list of arguments $argv0 -> indicates the name of script
Пример:–
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
продукция:-
- Брой аргументи, предадени на скриптовете: 3
- Списъкът с аргументи се предава на скрипта: 10 20 30
- Името на скрипта е: arg-script.tcl
TCL Expression и OperaTor
Изразът се конструира от операнди и оператори. Той се оценява с командата „expr“. Operaторите се оценяват въз основа на приоритет и асоциативност. Езикът TCL има вградени оператори, както е показано по-долу
| OperaКатегория на tor | символ | Предимство/Асоциативност |
|---|---|---|
| аритметика OperaTor | + – * / % | От ляво на дясно |
| Релационна OperaTor | == != < > <= >= | От ляво на дясно |
| логичен OperaTor | && || ! | От ляво на дясно |
| побитовото OperaTor | & | ^ ~ | От ляво на дясно |
| Тройна OperaTor | ?: | От дясно на ляво |
| Shift OperaTor | << >> | От ляво на дясно |
| Сравнение на низове OperaTor | уравнение не | От ляво на дясно |
| степенуване OperaTor | ** | От ляво на дясно |
| списък OperaTor | В ни | От ляво на дясно |
аритметика OperaTor
TCL изразът се състои от комбинация от операнди, оператори и скоби. Нека видим пример за аритметични оператори в TCL
+ Добавете два или повече операнда
Пр.:-
%set a 10 %set b 20 %puts [expr $a + $b] 30
– Подчиненtracts два или повече операнда
Пр.:-
%set a 20 %set b 10 %puts [expr $a - $b] 10
* Умножете два или повече операнда
%set a 20 %set b 10 %puts [expr $a * $b] 200
/ Разделете числител на пречислител
%set a 20 %set b 10 %puts [expr $a / $b] 2
Операторът на модула % разделя числител на числител, но връща напомняне
%set a 20 %set b 10 %puts [expr $a % $b] 0
Релационна OperaTor
Проверява дали стойността на левия операнд е по-голяма от стойността на десния операнд. Ако да, тогава условието става вярно и връща 1, иначе връща 0.
%set a 20 %set b 10 %puts [expr $a > $b] 1
Проверете дали стойността на левия операнд е по-малка от стойността на десния операнд. Ако да, тогава условието става вярно и връща 1, иначе връща 0
%set a 10 %set b 20 %puts [expr $a < $b] 1
>= Проверява дали стойността на левия операнд е по-голяма или равна на стойността на десния операнд, ако да, тогава условието става вярно и връща 1, иначе връща 0
%set a 20 %set b 10 %puts [expr $a >= $b] 1
<= Проверява дали стойността на левия операнд е по-малка или равна на стойността на десния операнд, ако да, тогава условието става вярно и връща 1, иначе връща 0
%set a 20 %set b 10 %puts [expr $a <= $b] 0
!= Проверява дали стойностите на два операнда са равни или не, ако стойностите не са равни, тогава условието става истина и връща 1, иначе връща 0
%set a 20 %set b 10 %puts [expr $a != $b] 1
== Проверява дали стойностите на два операнда са равни или не, ако да, тогава условието става вярно и връща 1, иначе връща 0
%set a 20 %set b 10 %puts [expr $a == $b] 0
логичен OperaTor
&& Ако и двата операнда са различни от нула, тогава условието става вярно и връща 1, иначе връща 0
%set a 20 %set b 10 %puts [expr $a && $b] 1
|| Ако някой от двата операнда е различен от нула, тогава условието става истина и връща 1, иначе връща 0
%set a 0 %set b 10 %puts [expr $a || $b] 1
! Използва се за обръщане на резултата от произволен израз. Тук в изхода можете да видите, че стойността на 'a' вече е станала 1 от 0. Докато стойността на 'b' е станала 0 от 1.
%set a 0 %set b 1 %puts [expr !$a] 1 %puts [expr !$b] 0
побитовото OperaTor
& (побитово и) изпълнява бит по бит операция и следвайте таблицата по-долу за работа.
| A | B | A & B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 1 |
| 1 | 0 | 0 |
Пр.:-
%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
| (побитово или) изпълнете операция бит по бит и следвайте таблицата по-долу
| A | B | A | б |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 1 | 1 |
| 1 | 0 | 1 |
Пр.:-
%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
^ (побитово ексклузивно или) изпълнява битова операция и следвайте таблицата по-долу
| A | B | А ^ Б |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
| 1 | 0 | 1 |
Пр.:-
%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
~ (побитово отрицание) оператор променя всяко 1 на 0 и 0 на 1, следвайте таблицата като справка
| A | ~A |
|---|---|
| 0 | 1 |
| 1 | 0 |
%set A 7 %puts [expr ~$A] -8
Тройна Operaтор (?:)
Синтаксисът е
condition-expression? expression_1: expression_2
Ако условие-exp е вярно, exp1 се оценява и резултатът се връща. Ако cond-exp е невярно, exp2 се оценява и резултатът се връща. В нашия пример exp1 е вярно, тъй като стойността на A е по-голяма от 6.
%set A 7 %set result [expr $A > 6 ? true : false] %puts $result true
Shift OperaTor
Shift се обозначава или с << ляв оператор за преместване, или с >> десен оператор за преместване. За << ляв оператор за отместване стойността на левия операнд се премества наляво с броя битове, определени от десния операнд.
%set A 7 %set result [expr $A << 2] %puts $result
За >> оператора за десен преместване стойността на левия операнд се премества надясно с броя битове, определени от десния операнд.
%set A 7 %set result [expr $A >> 2] %puts $result
Сравнение на низове OperaTor
Операторът за сравнение на низове сравнява стойността на двата операнда. Ако стойността на операнда е еднаква, тогава ще върне 1, в противен случай ще върне 0. В примера стойността и за A, и за B е 7, следователно резултатът връща 1.
Пр.:-
%set A 7 %set B 7 %set result [expr $A eq $B] %puts $result 1
Ne (ако стойността на двата операнда е различна, тогава ще върне 1, иначе ще върне 0)
%set A 7 %set B 8 %set result [expr $A ne $B] %puts $result 1
Оператор за степенуване
Pow () и ** са еднакви. Винаги връща плаваща стойност.
** показва мощността на желания операнд.
Пр.:-
%set A 7 %set result [expr $A ** 2] %puts $result 49
списък OperaTor
Ако търсената стойност е намерена в дефинирания списък, връща 1, в противен случай връща 0. В примера стойност 1 съществува в променлива 'a', следователно ще върне 1.
set a {1 2 3} if {1 in $a} { puts "ok" } else { puts "fail" } Output: ok
ni, ако изискваната стойност бъде намерена в дефинирания списък, тогава тя ще върне 0, иначе ще върне 1.
Пример: -
set a {1 2 3} if {1 ni $a} { puts "ok" } else { puts "fail" } Output: fail
TCL контрол на потока и вземане на решения
Има различни команди за управление на потока и вземане на решения, които се използват за промяна на потока на програма. Изпълнението на програмата винаги започва от горната част на изходния файл към дъното.
Операторът If се състои от булев израз, последван от един или повече оператори.
Ако … изявление
Синтаксис: -
if expr ?тогава? тяло
ако изразът е оценен като верен, тогава тялото на командата се изпълнява.
Пр.:-
set age 10 if {$age < 20} { puts "Age is less than 20" } Output: Age is less than 20
Ако … иначе оператор
Синтаксис: -
Ако израз ? след това тяло_1 друго тяло_2
Ако изразът е оценен като true, тогава той ще върне тяло_1, в противен случай ще върне тяло_2
Пример:–
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
Вложен оператор if..else
Това означава, че един оператор if или else..if може да бъде поставен в друг оператор if или else..if.
Синтаксис: -
If {expression_1} { Body_1 If {expression_2} { Body_2 } }
Пример:–
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
Изявление за превключване
Операторът switch позволява променлива да бъде тествана за равенство спрямо списък от стойности. Той оценява списъка със стойности и връща резултата от тази оценка. Ако нито една стойност не съвпада, ще бъдат върнати стойностите по подразбиране.
Пример:
#!/usr/bin/tclsh # switch_cmd.tcl set domain x switch $domain { x { puts "x" } y { puts "y" } z { puts "z" } default { puts "unknown" } }
Вложен превключвател
Вложен оператор switch означава оператор switch вътре в оператор switch.
Синтаксис :-
switch <switchingstring1> { <matchstring1> { body1 switch <switchingstring2> { <matchstring2> { body2 } ... switch <switchingstringN> { <matchStringN> { bodyN } } }
ПримерВ следващия пример стойността на a е 100 и със същия код сменяме оператора за друга стойност на b, която е 200. Изходът ще покаже стойността и за a, и за 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" } } } }
Изход: -
Стойността на a е 100
Стойността на b е 200
Инструкция за цикъл на TCL
Цикълът позволява изпълнението на оператор или група оператори многократно. Tcl предоставя следните типове looping изявление.
Докато команда
Когато дадено условие е вярно, тогава оператор или група от оператори се повтаря, които са в тялото на цикъла.
Синтаксис:
While {condition} {
Statements
}
Пример: -
#!/usr/bin/tclsh Set a 10 While {$a < 12} { Puts "a is $a" incr a }
Изход: -
а е 10
а е 11
В горния пример е използвана вградената команда „incr“. Това означава, че стойността на „a“ ще бъде увеличена с 1 до максималната стойност (<12).
За команда
Изпълнява поредица от оператори няколко пъти въз основа на стойност на брояч. Тя се увеличава или намалява автоматично по време на всяко повторение на цикъла.
Синтаксис :-
For {start} {test} {next} {
Body
}
ПримерВ примера по-долу стойността на 'i' е зададена на 0 и се увеличава, докато стойността стане <5.
#!/usr/bin/tclsh for {set i 0} {$i < 5} {incr i} { put $i }
Изход: -
0 1 2 3 4


