TCL TK Tutorial: Tool Command Language
Що таке TCL?
TCL — це програма оболонки, яка зчитує команду TCL зі стандартного вводу або з файлу та дає бажані результати.
TCL — це мова сценаріїв на основі рядків, а також процедурна мова. Вперше її створив Джон Остерхаут у 1989 році. Метою розробки цієї мови є легке вбудоване програмне забезпечення inti ( ). Ця мова зазвичай використовується для GUI та тестування. Наприклад, швидке прототипування, Тестування взаємодія з базою даних тощо. У TCL за замовчуванням все є рядком.
У цьому підручнику ви дізнаєтесь-
- Що таке TCL
- Як запустити TCL
- Скрипти TCL
- Тип заміни TCL
- Змінна TCL
- Вираз TCL і Operaтор
- Контроль потоку TCL і прийняття рішень
Як запустити TCL
Існує два способи виконання коду TCL
- Windows додаток на основі доступний тут файл tcltutor exe
- Програма на базі Linux
In Linux інтерактивний інтерпретатор, ми можемо виконувати сценарії TCL, як показано нижче
Щоб отримати доступ до інтерактивного сеансу TCL, виконайте таку команду
Скрипти TCL
Програма TCL повинна мати розширення .tcl. Кожен сценарій в UNIX/LINUX починається зі шляху оболонки TCL
#!/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
Тут спочатку обчислюється команда в квадратних дужках. Результати повертають .”вираз”, який використовується для виконання арифметичного обчислення.
Заміна змінної
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.
Змінна 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» тощо. Тут ми побачимо приклад «інформація існує».
Наприклад:-
% 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} -> Тут число є типом даних списку
%поміщає $number
%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 і Operaтор
Вираз складається з операндів і операторів. Він обчислюється за допомогою команди "expr". Operaтори оцінюються на основі пріоритету та асоціативності. Мова TCL має вбудовані оператори, як показано нижче
OperaТор Категорія | Symbol | Попередність/асоціативність |
---|---|---|
Арифметика Operaтор | + - * / % | Зліва направо |
Реляційний Operaтор | == != < > <= >= | Зліва направо |
логічний Operaтор | && || ! | Зліва направо |
Побітовий Operaтор | & | ^ ~ | Зліва направо |
Трінарний Operaтор | ?: | Праворуч наліво |
Shift Operaтор | << >> | Зліва направо |
Порівняння рядків Operaтор | eq ne | Зліва направо |
Експоненція Operaтор | ** | Зліва направо |
список Operaтор | В ні | Зліва направо |
Арифметика Operaтор
Вираз 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
Реляційний Operaтор
Перевіряє, чи значення лівого операнда більше за значення правого операнда. Якщо так, тоді умова стає істинною та повертає 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
логічний Operaтор
&& Якщо обидва операнди не нульові, тоді умова стає істинною та повертає 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
Побітовий Operaтор
& (порозрядно та) виконайте побітову операцію та дотримуйтеся наведеної нижче таблиці для виконання операцій.
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 Operaтор
Shift позначається або << оператором зсуву вліво, або оператором >> зсуву вправо. Для << оператора зсуву вліво значення лівих операндів переміщується вліво на кількість бітів, визначену правим операндом.
%set A 7 %set result [expr $A << 2] %puts $result
Для оператора зсуву вправо значення лівих операндів переміщується вправо на кількість бітів, визначену правим операндом.
%set A 7 %set result [expr $A >> 2] %puts $result
Порівняння рядків Operaтор
Оператор порівняння рядків порівнює значення обох операндів. Якщо значення операнда однакове, тоді він поверне 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
список Operaтор
Якщо необхідне значення знайдено у визначеному списку, воно повертає 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 складається з логічного виразу, за яким слідують один або більше операторів.
Якщо ... твердження
Синтаксис: -
якщо вираз ?то? тіло
якщо вираз оцінюється як істина, тоді виконується тіло команди.
Наприклад:-
set age 10 if {$age < 20} { puts "Age is less than 20" } Output: Age is less than 20
Оператор If ... else
Синтаксис: -
Якщо вираз ? тоді body_1 ще body_2
Якщо вираз оцінено як істинний, він поверне тіло_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