TCL TK Урок: Команден език на инструмента

Какво е TCL?

TCL е шел приложение, което чете TCL команда от стандартния си вход или от файл и дава желаните резултати.

TCL е базиран на низове скриптов език, а също и процедурен език. За първи път е създаден от Джон Остерхаут през 1989 г. Целта на разработването на този език е лесно вграждане на inti ( ) приложения. Езикът обикновено се използва за GUI и тестване. Например бързото създаване на прототипи, Тестване взаимодействие с база данни и т.н. В 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 обратната наклонена черта се използва за екраниране на специални символи, както и за разпръскване на дълги команди в няколко реда. Всеки знак непосредствено след обратната наклонена черта ще стои без заместване. В примера по-долу можете да видите специален знак „ “, оставащ след обратната наклонена черта.

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

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

Пр.:-

% 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 има вградени оператори, както е показано по-долу

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

аритметика OperaTor

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

Релационна 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

Изявление If ... else

Синтаксис: -

Ако израз ? след това тяло_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 предоставя следните типове инструкции за цикъл.

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

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

Синтаксис:

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 е базиран на низове скриптов език, а също и процедурен език
  • Езикът обикновено се използва за GUI и тестване
  • В TCL по подразбиране всичко е низ
  • TCL е шел приложение, което чете TCL команда от стандартния си вход или от файл и дава желаните резултати.
  • TCL програмата трябва да има разширение .tcl