Учебное пособие по TCL TK: язык команд инструментов

Что такое ТКЛ?

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

TCL — это строковый язык сценариев, а также процедурный язык. Впервые он был создан Джоном Остерхаутом в 1989 году. Целью разработки этого языка является простота внедрения в приложения ( ). Этот язык обычно используется для графических интерфейсов и тестирования. Например, быстрое прототипирование. Тестирование взаимодействие с базой данных и т. д. В 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? нить

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

Давайте проверим это на примере

#!/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 существует» возвращает 1, если varName существует как переменная (или элемент массива) в текущем контексте, в противном случае возвращает 0. (см. пример ниже).

В TCL существуют различные команды «информация», такие как «информация существует», «информационные функции», «информация глобальная» и так далее. Здесь мы увидим пример «информация существует».

Бывший:-

% 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тор экв 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 А и Б
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, и с помощью того же кода мы переключаем оператор для другого значения 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 — это строковый язык сценариев, а также процедурный язык.
  • Язык обычно используется для графических интерфейсов и тестирования.
  • В TCL по умолчанию все строковое.
  • TCL — это приложение оболочки, которое считывает команду TCL со стандартного ввода или из файла и дает желаемые результаты.
  • Программа TCL должна иметь расширение .tcl.