Учебное пособие по Tcl/Tk
⚡ Умное резюме
TCL (Tool Command Language) — это строковый скриптовый и процедурный язык, созданный Джоном Остерхаутом в 1989 году и широко используемый для графических пользовательских интерфейсов и быстрого прототипирования.pingа также тестирование, в котором каждое значение по умолчанию рассматривается как строка.

Что такое ТКЛ?
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 приведен ниже.
puts ?-nonewline? ?channelId? string
- Нет новой строки: этот необязательный параметр подавляет символ новой строки по умолчанию. Он помещает новую строку в каждую строку
- Идентификатор канала: этот параметр используется для стандартного входного канала (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 обратная косая черта используется для обозначения выхода.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
Чтобы получить значение переменной, необходимо использовать символ «$», например
% положить $а
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-выражение и Operaтор
Выражение формируется из операндов и операторов. Оно вычисляется с помощью команды «expr». Operators оцениваются на основе приоритета и ассоциативности. Язык TCL имеет встроенные операторы, как показано ниже
| Operaкатегория тор | Символ | Приоритет/Ассоциативность |
|---|---|---|
| Арифметический Operaтор | + - * /% | Слева направо |
| реляционный Operaтор | == != < > <= >= | Слева направо |
| логический Operaтор | && || ! | Слева направо |
| побитовое Operaтор | & | ^ ~ | Слева направо |
| троичный Operaтор | ?: | Справа налево |
| Shift Operaтор | << >> | Слева направо |
| Сравнение строк Operaтор | еq не | Слева направо |
| Возведение 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 | А и Б |
|---|---|---|
| 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 | А | B |
|---|---|---|
| 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 имеет значение false, вычисляется 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
да, если требуемое значение найдено в определенном списке, оно вернет 0, иначе вернет 1.
Бывший :-
set a {1 2 3} if {1 ni $a} { puts "ok" } else { puts "fail" } Output: fail
Управление потоком TCL и принятие решений
Существуют различные команды управления потоком и принятия решений, которые используются для изменения потока программы. Выполнение программы всегда начинается с начала исходного файла вниз.
Оператор if состоит из логического выражения, за которым следуют один или несколько операторов.
Если… утверждение
Синтаксис:-
если выражение ?то? тело
если expr имеет значение true, то выполняется тело команды.
Бывший:-
set age 10 if {$age < 20} { puts "Age is less than 20" } Output: Age is less than 20
Если… иначе
Синтаксис: -
Если выражение? затем тело_1 еще тело_2
Если выражение оценено как true, оно вернет body_1, иначе оно вернет body_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
Смена оператора
Оператор переключения позволяет проверить переменную на равенство списку значений. Он оценивает список значений и возвращает результат этой оценки. Если ни одно из значений не соответствует, будут возвращены значения по умолчанию.
Пример:
#!/usr/bin/tclsh # switch_cmd.tcl set domain x switch $domain { x { puts "x" } y { puts "y" } z { puts "z" } default { puts "unknown" } }
Вложенный переключатель
Вложенный оператор переключения означает оператор переключения внутри оператора переключения.
Синтаксис :-
switch <switchingstring1> { <matchstring1> { body1 switch <switchingstring2> { <matchstring2> { body2 } ... switch <switchingstringN> { <matchStringN> { bodyN } } }
ПримерВ следующем примере значение переменной a равно 100, и с помощью того же кода мы используем оператор switch для значения переменной 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
