Урок по Tcl/Tk

⚡ Умно обобщение

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

  • 🧵 Дефиниция на TCL: Скриптов и процедурен език, базиран на низове, където всичко е низ по подразбиране.
  • ▶ ️ Екзекуция: Изпълнявайте Tcl скриптове чрез tclsh shell на 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 shell път

#!/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, обратната наклонена черта се използва за esc.ping специални символи, както и за разпределяне на дълги команди на няколко реда. Всеки символ непосредствено след обратната наклонена черта ще остане без заместване. В примера по-долу можете да видите, че специалният символ „ “ остава след обратната наклонена черта.

Нека проверим това с пример

#!/usr/bin/tclsh

puts "This  is my  \"car\""

$ ./backslashsubstitution.tcl
This is my "car"

ЗАБЕЛЕЖКА: -За коментиране на всеки низ в TCL се използва “#”. Всички знаци след “#” се игнорират от командата tclsh shell.

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} -> Тук числото е тип данни от списък

% поставя $число

%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 Expression и OperaTor

Изразът се конструира от операнди и оператори. Той се оценява с командата „expr“. Operaторите се оценяват въз основа на приоритет и асоциативност. Езикът TCL има вградени оператори, както е показано по-долу

OperaКатегория на tor символ Предимство/Асоциативност
аритметика OperaTor + – * / % От ляво на дясно
Релационна OperaTor == != < > <= >= От ляво на дясно
логичен OperaTor && || ! От ляво на дясно
побитовото OperaTor & | ^ ~ От ляво на дясно
Тройна OperaTor ?: От дясно на ляво
Shift OperaTor << >> От ляво на дясно
Сравнение на низове OperaTor уравнение не От ляво на дясно
степенуване OperaTor ** От ляво на дясно
списък OperaTor В ни От ляво на дясно

аритметика OperaTor

TCL изразът се състои от комбинация от операнди, оператори и скоби. Нека видим пример за аритметични оператори в TCL

+ Добавете два или повече операнда

Пр.:-

%set a 10
%set b 20
%puts [expr $a + $b]
30

– Подчиненtracts два или повече операнда

Пр.:-

%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

Релационна OperaTor

Проверява дали стойността на левия операнд е по-голяма от стойността на десния операнд. Ако да, тогава условието става вярно и връща 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

логичен OperaTor

&& Ако и двата операнда са различни от нула, тогава условието става вярно и връща 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

побитовото OperaTor

& (побитово и) изпълнява бит по бит операция и следвайте таблицата по-долу за работа.

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 OperaTor

Shift се обозначава или с << ляв оператор за преместване, или с >> десен оператор за преместване. За << ляв оператор за отместване стойността на левия операнд се премества наляво с броя битове, определени от десния операнд.

%set A 7
%set result [expr $A << 2]
%puts $result

За >> оператора за десен преместване стойността на левия операнд се премества надясно с броя битове, определени от десния операнд.

%set A 7
%set result [expr $A >> 2]
%puts $result

Сравнение на низове OperaTor

Операторът за сравнение на низове сравнява стойността на двата операнда. Ако стойността на операнда е еднаква, тогава ще върне 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

списък OperaTor

Ако търсената стойност е намерена в дефинирания списък, връща 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 се състои от булев израз, последван от един или повече оператори.

Ако … изявление

Синтаксис: -

if expr ?тогава? тяло

ако изразът е оценен като верен, тогава тялото на командата се изпълнява.

Пр.:-

set age 10

if {$age < 20} {
puts "Age is less than 20"
}

Output: Age is less than 20

Ако … иначе оператор

Синтаксис: -

Ако израз ? след това тяло_1 друго тяло_2

Ако изразът е оценен като true, тогава той ще върне тяло_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 предоставя следните типове looping изявление.

Докато команда

Когато дадено условие е вярно, тогава оператор или група от оператори се повтаря, които са в тялото на цикъла.

Синтаксис:

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 е необходима за извършване на аритметични, сравнения и булеви операции.

AI асистентите могат да генерират Tcl код, да обясняват команди като set, puts и expr, да конвертират псевдокод в Tcl и да отстраняват синтактични грешки, helping начинаещите учат езика по-бързо.

Да. Инструментите с изкуствен интелект могат да превеждат Tcl скриптове на езици като Python или Perl, картаping команди и контролни структури, въпреки че разработчиците трябва да проверят резултата за коректност.

Обобщете тази публикация с: