Підручник з 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
#!/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 зворотна коса риска використовується для esca.ping спеціальні символи, а також для розподілу довгих команд на кілька рядків. Будь-який символ, що йде одразу після зворотної скісної риски, залишатиметься без заміни. У прикладі нижче ви можете побачити, що спеціальний символ " " залишається після зворотної скісної риски.
Переконаємося в цьому на прикладі
#!/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» (інформація глобальна) тощо. Тут ми побачимо приклад «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} -> Тут число є типом даних списку
%поміщає $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тор | рівняння | Зліва направо |
| Експоненція Operaтор | ** | Зліва направо |
| список Operaтор | В ні | Зліва направо |
Арифметика Operaтор
Вираз TCL складається з комбінації операндів, операторів і круглих дужок. Розгляньмо приклад арифметичних операторів у TCL
+ Додайте два або більше операндів
Наприклад:-
%set a 10 %set b 20 %puts [expr $a + $b] 30
– Підзаголовокtracдва або більше операндів
Наприклад:-
%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 надає такі типи операторів циклу:ping Заява
Поки команда
Коли задана умова є істинною, оператор або група операторів повторюються в тілі циклу.
синтаксис:
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

