Підручник з Tcl/Tk

⚡ Розумний підсумок

TCL (Tool Command Language) — це мова сценаріїв та процедур на основі рядків, створена Джоном Остерхаутом у 1989 році, яка широко використовується для графічних інтерфейсів, швидкого прототипування.ping, та тестування, де кожне значення за замовчуванням обробляється як рядок.

  • 🧵 Визначення TCL: Мова сценаріїв та процедур на основі рядків, де все за замовчуванням є рядком.
  • ▶ ゚ Виконання: Запускати Tcl-скрипти через оболонку tclsh на Windows або Linux, з файлами, що використовують розширення .tcl.
  • 🔄 Заміна: Підтримує підстановку команд (квадратні дужки), змінних ($) та зворотної скісної риски.
  • 📦 Змінні: Створено за допомогою set, прочитано за допомогою $, видалено за допомогою unset та перевірено за допомогою info exists.
  • Вирази: Команда expr обчислює арифметичні, реляційні, логічні, побітові та інші оператори.
  • 🔀 Управління потоком: Надає оператори if/else, switch, while та for для прийняття рішень та циклів.

Підручник з TCL/Tk

Що таке TCL?

TCL — це програма оболонки, яка зчитує команду TCL зі стандартного вводу або з файлу та дає бажані результати.

TCL — це мова сценаріїв на основі рядків, а також процедурна мова. Вона була вперше створена Джоном Остерхаутом у 1989 році. Мета розробкиping Цю мову легко вбудовувати в додатки. Мова зазвичай використовується для графічних інтерфейсів та тестування. Наприклад, швидке прототипуванняping, Тестування взаємодія з базою даних тощо. У TCL за замовчуванням все є рядком.

Як запустити TCL

Існує два способи виконання коду TCL:

  1. Windows додаток на основі доступний тут файл tcltutor exe
  2. Програма на базі Linux

In Linux інтерактивний інтерпретатор, ми можемо виконувати сценарії TCL, як показано нижче

Щоб отримати доступ до інтерактивного сеансу 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 є три види замін

  1. Заміна команд
  2. Заміна змінної
  3. Заміна зворотної косої риски

Давайте вивчати по одному

Заміна команд

Квадратні дужки використовуються для підстановки команд.

Приклад:-

% 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 групують слова разом, щоб стати аргументами. Фігурні дужки використовуються для визначення блоку, який відкладається – іншими словами, його можна виконати ПІСЛЯ решти команди в поточному рядку. Символи у дужках передаються команді точно так, як вони записані.

Деякі моменти, про які варто пам’ятати

  1. Заміна змінної в фігурних дужках {} заборонена
  2. Він використовувався для створення типу даних списку

Приклад:-

% 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

Поширені запитання

Так. Tcl досі використовується для автоматизації, тестування, інструментів EDA, сценаріїв мережевих пристроїв та вбудовування в додатки. Інструмент Expect та багато тестових фреймворків покладаються на Tcl, хоча він менш поширений для нових веб-додатків.

Tcl — це мова сценаріїв, а Tk — супутній графічний інструментарій для створення графічних інтерфейсів. Разом, як Tcl/Tk, вони дозволяють писати кросплатформні настільні програми за допомогою простих команд.

Команда expr обчислює математичні та логічні вирази в Tcl. Оскільки Tcl обробляє все як рядок, expr необхідна для виконання арифметичних операцій, порівнянь та логічних операцій.

Асистенти ШІ можуть генерувати код Tcl, пояснювати такі команди, як set, puts та expr, конвертувати псевдокод у Tcl та налагоджувати синтаксичні помилки, helping новачки швидше вивчають мову.

Так. Інструменти штучного інтелекту можуть перекладати скрипти Tcl на такі мови, як Python або Perl, картаping команди та структури керування, хоча розробникам слід перевірити вивід на правильність.

Підсумуйте цей пост за допомогою: