Учебное пособие по 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 — это скриптовый язык, основанный на строках, а также процедурный язык. Он был впервые создан Джоном Остерхаутом в 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 приведен ниже.

puts ?-nonewline? ?channelId? string

  • Нет новой строки: этот необязательный параметр подавляет символ новой строки по умолчанию. Он помещает новую строку в каждую строку
  • Идентификатор канала: этот параметр используется для стандартного входного канала (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 обратная косая черта используется для обозначения выхода.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 фигурные скобки объединяют слова в аргументы. Фигурные скобки используются для определения отложенного блока — другими словами, он может быть выполнен ПОСЛЕ остальной части команды на текущей строке. Символы внутри скобок передаются команде точно так, как они написаны.

Некоторые моменты, которые следует помнить

  1. Подстановка переменных не допускается внутри фигурных скобок {}.
  2. Он использовался для создания типа данных списка

Пример:-

% 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

Часто задаваемые вопросы (FAQ)

Да. Tcl по-прежнему используется для автоматизации, тестирования, инструментов EDA, написания скриптов для сетевых устройств и встраивания в приложения. Инструмент Expect и многие тестовые фреймворки основаны на Tcl, хотя он менее распространен в новых веб-приложениях.

Tcl — это скриптовый язык, а Tk — сопутствующий графический инструментарий для создания графических интерфейсов пользователя. Вместе, как Tcl/Tk, они позволяют писать кроссплатформенные настольные приложения с помощью простых команд.

Команда expr вычисляет математические и логические выражения в Tcl. Поскольку Tcl обрабатывает все как строки, команда expr необходима для выполнения арифметических операций, сравнений и логических операций.

Искусственный интеллект-ассистенты могут генерировать код Tcl, объяснять команды, такие как set, puts и expr, преобразовывать псевдокод в Tcl и отлаживать синтаксические ошибки, а также помогатьping Начинающие быстрее осваивают язык.

Да. Инструменты искусственного интеллекта могут переводить скрипты Tcl на такие языки, как... Python или Perl, mapping команды и структуры управления, хотя разработчикам следует проверять правильность выходных данных.

Подведем итог этой публикации следующим образом: