TCL TK Урок: Команден език на инструмента
Какво е TCL?
TCL е шел приложение, което чете TCL команда от стандартния си вход или от файл и дава желаните резултати.
TCL е базиран на низове скриптов език, а също и процедурен език. За първи път е създаден от Джон Остерхаут през 1989 г. Целта на разработването на този език е лесно вграждане на inti ( ) приложения. Езикът обикновено се използва за GUI и тестване. Например бързото създаване на прототипи, Тестване взаимодействие с база данни и т.н. В TCL по подразбиране всичко е низ.
В този урок ще научите-
- Какво е TCL
- Как да изпълним TCL
- TCL скриптове
- TCL Тип заместване
- TCL променлива
- TCL Expression и OperaTor
- 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 обратната наклонена черта се използва за екраниране на специални символи, както и за разпръскване на дълги команди в няколко реда. Всеки знак непосредствено след обратната наклонена черта ще стои без заместване. В примера по-долу можете да видите специален знак „ “, оставащ след обратната наклонена черта.
Нека проверим това с пример
#!/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 като „информация съществува“, „информационни функции“, „глобална информация“ и т.н. Тук ще видим пример за „информация съществува“.
Пр.:-
% 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 има вградени оператори, както е показано по-долу
Operator Категория | символ | Предимство/Асоциативност |
---|---|---|
аритметика OperaTor | + - * / % | От ляво на дясно |
Релационна OperaTor | == != < > <= >= | Отляво надясно |
логичен OperaTor | && || ! | Отляво надясно |
побитовото OperaTor | & | ^ ~ | Отляво надясно |
Тройна OperaTor | ?: | От дясно на ляво |
Shift OperaTor | << >> | Отляво надясно |
Сравнение на низове OperaTor | eq ne | Отляво надясно |
степенуване OperaTor | ** | Отляво надясно |
списък OperaTor | В ни | Отляво надясно |
аритметика OperaTor
TCL изразът се състои от комбинация от операнди, оператори и скоби. Нека видим пример за аритметични оператори в TCL
+ Добавете два или повече операнда
Пр.:-
%set a 10 %set b 20 %puts [expr $a + $b] 30
- Изважда два или повече операнда
Пр.:-
%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
Изявление If ... else
Синтаксис: -
Ако израз ? след това тяло_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 предоставя следните типове инструкции за цикъл.
Докато команда
Когато дадено условие е вярно, тогава оператор или група от оператори се повтаря, които са в тялото на цикъла.
Синтаксис:
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
Резюме:
- TCL е базиран на низове скриптов език, а също и процедурен език
- Езикът обикновено се използва за GUI и тестване
- В TCL по подразбиране всичко е низ
- TCL е шел приложение, което чете TCL команда от стандартния си вход или от файл и дава желаните резултати.
- TCL програмата трябва да има разширение .tcl