Samouczek TCL TK: Język poleceń narzędzi

Co to jest TCL?

TCL to aplikacja powłoki, która odczytuje polecenia TCL ze standardowego wejścia lub z pliku i daje pożądane wyniki.

TCL to język skryptowy oparty na ciągach znaków, a także język proceduralny. Został on stworzony po raz pierwszy przez Johna Osterhouta w 1989. Celem rozwoju tego języka jest łatwe osadzanie aplikacji inti(). Język ten jest powszechnie używany w GUI i testach. Na przykład szybkie prototypowanie, Testowanie interakcja z bazą danych itp. W TCL domyślnie wszystko jest ciągiem znaków.

W tym samouczku dowiesz się:

Jak wykonać TCL

Istnieją dwa sposoby wykonania kodu TCL

  1. Windows aplikacja jest dostępna tutaj plik exe tcltutor
  2. Aplikacja oparta na Linuksie

In Linux interaktywny interpreter, możemy wykonać skrypty TCL jak poniżej

Aby uzyskać dostęp do sesji interaktywnej TCL, wykonaj następujące polecenie

Samouczek TCL: Język poleceń narzędzi

Skrypty TCL

Program TCL powinien mieć rozszerzenie .tcl. Każdy skrypt w UNIX/LINUX zaczyna się od ścieżki powłoki TCL

#!/usr/bin/tclsh

Przykład:-

#!/usr/bin/tclsh
Puts "Hello World"
Script execution:-
$ chmod +x helloworld.tcl
$ ./helloworld.tcl

Wydajność: Witaj świecie

W TCL polecenie „Puts” służy do drukowania komunikatów na konsoli. Składnia puts jest poniżej

stawia?-nonewline? ?ID kanału? strunowy

  • Brak linii: Ten opcjonalny parametr domyślnie pomija znak nowego wiersza. Umieszcza nową linię do każdego ciągu
  • ID kanału: Ten parametr używany dla standardowego kanału wejściowego (stdin) i standardowego kanału wyjściowego (stdout).

Były:-

%puts "Hello World"
% Hello World
%puts stdout  "Hello World"
% Hello World

TCL Rodzaj podstawienia

W TCL występują trzy rodzaje podstawień

  1. Zastępowanie poleceń
  2. Podstawianie zmiennych
  3. Podstawienie ukośnika odwrotnego

Studiujmy jeden po drugim

Zastępowanie poleceń

Do podstawienia poleceń używa się nawiasów kwadratowych.

Przykład:-

% puts [expr 1*3]
% 3

Tutaj polecenie między nawiasami kwadratowymi jest oceniane jako pierwsze. Wyniki są zwracane .”expr” używane do wykonywania obliczeń arytmetycznych.

Podstawianie zmiennych

TCL dokonuje podstawienia zmiennych za pomocą $ znak.

Przykład:-

#!/usr/bin/tclsh
set  a  10
puts  a
puts  $a 

Tutaj tworzymy zmienną o nazwie „a” i ustawiamy dla niej wartość „10”.

  • puts a : Wypisuje na konsoli ciąg „a”, ale nie wartość „a”.
  • puts $a: Wypisuje wartość „a” na konsoli

Wykonajmy to i zweryfikujmy. Otrzymasz wynik jak poniżej.

$ ./substitution.tcl

a

10

Podstawienie ukośnika odwrotnego

W Tcl ukośnik odwrotny jest używany do ucieczki znaków specjalnych, a także do rozprzestrzeniania długich poleceń na wiele wierszy. Każdy znak bezpośrednio następujący po ukośniku odwrotnym pozostanie bez podstawienia. W poniższym przykładzie możesz zobaczyć znak specjalny ” “, pozostaje po ukośniku odwrotnym.

Sprawdźmy to na przykładzie

#!/usr/bin/tclsh

puts "This  is my  \"car\"

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

NOTATKA: -Do komentowania dowolnego ciągu znaków w TCL używany jest znak „#”. Wszystkie znaki po „#” są ignorowane przez polecenie powłoki tclsh.

Zmienna TCL

Zmienna to identyfikator przechowujący wartość. Innymi słowy, zmienna jest odniesieniem do pamięci komputera, w której przechowywana jest wartość.

Zmienne są tworzone za pomocą polecenia „set”, a w nazwach zmiennych rozróżniana jest wielkość liter. Oznacza to: cześć, cześć, cześć, w TCL wszystko jest inne. Spójrz na przykład zmiennej rozróżniającej wielkość liter.

% set  name  Techoit
% set  Name  Technoit_1
% set  NAME  Technoit_2

Wynik:-

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

Tworzenie zmiennych TCL

Aby utworzyć zmienne w TCL, musisz użyć "ustawić" komenda

Ustaw 10

Aby uzyskać wartość zmiennej, należy użyć symbolu „$”, np

% umieścić $a

% 10

Otrzymujemy więc wartość zmiennej „a” jako 10.

Istnieją informacje o poleceniu TCL

Polecenie „set” służy do tworzenia i odczytywania zmiennych, jak pokazano powyżej. Polecenie unset służy do niszczenia zmiennej. Polecenie „info exists” zwraca 1, jeśli varName istnieje jako zmienna (lub element tablicy) w bieżącym kontekście, w przeciwnym razie zwraca 0. (zobacz przykład poniżej).

W TCL dostępne są różne polecenia „info”, takie jak „info istnieje”, „funkcje informacyjne”, „informacje globalne” i tak dalej. Tutaj zobaczymy przykład „informacja istnieje”.

Były:-

% set a 20
% puts $a
% 20
% puts [info exists a]
% 1
% unset a
%puts [info exists a]
% 0

Różne aparaty ortodontyczne i ich zachowanie

{} -> Nawiasy klamrowe

Nawiasy klamrowe w TCL grupują słowa, tworząc argumenty. Nawiasy klamrowe służą do zdefiniowania bloku, który ma zostać odroczony – innymi słowy, może zostać uruchomiony PO pozostałej części polecenia w bieżącym wierszu. Znaki w nawiasach są przekazywane do polecenia dokładnie w takiej formie, w jakiej zostały zapisane.

Kilka punktów do zapamiętania

  1. Podstawianie zmiennych nie jest dozwolone w nawiasach klamrowych {}
  2. Służył do tworzenia typu danych listy

Przykład:-

% set x 10
% puts {$x}
% $x

%set liczba {1 2 3 4 5} -> Tutaj liczba jest typem danych listy

%wstawia liczbę $

%1 2 3 4 5

[] -> nawiasy kwadratowe

Nawiasy kwadratowe służą do tworzenia zagnieżdżonych poleceń. Mówiąc prościej, wynik jednego polecenia przekazywany jako argument do innego polecenia. Nawiasy kwadratowe służą do definiowania bloku, który jest uruchamiany PRZED resztą polecenia w bieżącym wierszu, a wynik jest podstawiany do wiersza.

Były: -

% set x 10
% puts "y : [set y [set x 10]]"
%y : 10
% puts "x : $x"
%x : 10

() -> nawiasy okrągłe

To polecenie służy do tworzenia typu danych tablicowych oraz określania pierwszeństwa operatorów.

% set a(1) 10
% set a(2) 20

Tutaj „a” jest tablicą o wartościach 10 i 20. Zobacz poniższe polecenia, aby wydrukować klucze, pary klucz-wartość i wartości tablicy.

% 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

Aby wydrukować „N-tą” wartość tablicy a, użyjemy Puts $a(N)

Argumenty wiersza poleceń TCL

Elementy danych przekazywane do skryptu z wiersza poleceń nazywane są argumentami. Liczba argumentów wiersza poleceń do skryptu Tcl jest przekazywana jako zmienna globalna argc . Nazwa skryptu Tcl jest przekazywana do skryptu jako zmienna globalna argv0 , a pozostałe argumenty wiersza poleceń są przekazywane jako lista argumentacja.

TCL ma 3 predefiniowane zmienne, takie jak

$argc   -> indicates the number of arguments passed to the script

$argv   -> indicates list of arguments

$argv0  -> indicates the name of script

Były:-

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

wydajność:-

  • Liczba argumentów przekazanych do skryptów: 3
  • Do skryptu przekazywana jest lista argumentów: 10 20 30
  • Nazwa skryptu to: arg-script.tcl

Wyrażenie TCL i OperaTor

Wyrażenie jest konstruowane z operandów i operatorów. Jest oceniane za pomocą polecenia „expr”. Operatory są oceniane na podstawie pierwszeństwa i asocjatywności. Język TCL ma wbudowane operatory, jak poniżej

Operakategoria symbol Pierwszeństwo/łączność
Arytmetyka OperaTor + - * /% Od lewej do prawej
Relacyjny OperaTor == != < > <= >= Od lewej do prawej
logiczny OperaTor && || ! Od lewej do prawej
Bitowy OperaTor & | ^ ~ Od lewej do prawej
Potrójny OperaTor ?: Od prawej do lewej
Shift OperaTor << >> Od lewej do prawej
Porównanie ciągów OperaTor równoważne Od lewej do prawej
Potęgowanie OperaTor ** Od lewej do prawej
Lista OperaTor w ni Od lewej do prawej

Arytmetyka OperaTor

Wyrażenie TCL składa się z kombinacji operandów, operatorów i nawiasów. Zobaczmy przykład operatorów arytmetycznych w TCL

+ Dodaj dwa lub więcej operandów

Były:-

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

- Odejmuje dwa lub więcej operandów

Były:-

%set a 20 
%set b 10
%puts [expr $a - $b]
10

*Mnożenie dwóch lub więcej operandów

%set a 20 
%set b 10
%puts [expr $a * $b]
200

/ Podziel licznik przez mianownik

%set a 20 
%set b 10
%puts [expr $a / $b]
2

Operator modulo dzieli licznik przez dzielnik, ale zwraca przypomnienie

%set a 20 
%set b 10
%puts [expr $a % $b]
0

Relacyjny OperaTor

Sprawdza, czy wartość lewego operandu jest większa od wartości prawego operandu. Jeśli tak, warunek staje się prawdziwy i zwraca 1, w przeciwnym razie zwraca 0.

%set a 20 
%set b 10
%puts [expr $a > $b]
1

Sprawdź, czy wartość lewego operandu jest mniejsza od wartości prawego operandu. Jeśli tak, warunek staje się prawdziwy i zwraca 1, w przeciwnym razie zwraca 0.

%set a 10 
%set b 20
%puts [expr $a < $b]
1

>= Sprawdza, czy wartość lewego operandu jest większa lub równa wartości prawego operandu. Jeśli tak, warunek staje się prawdziwy i zwraca 1, w przeciwnym razie zwraca 0.

%set a 20 
%set b 10
%puts [expr $a >= $b]
1

<= Sprawdza, czy wartość lewego operandu jest mniejsza lub równa wartości prawego operandu. Jeśli tak, warunek staje się prawdziwy i zwraca 1, w przeciwnym razie zwraca 0.

%set a 20 
%set b 10
%puts [expr $a <= $b]
0

!= Sprawdza, czy wartości dwóch operandów są równe, czy nie. Jeśli wartości nie są równe, warunek staje się prawdziwy i zwraca 1, w przeciwnym razie zwraca 0.

%set a 20 
%set b 10
%puts [expr $a != $b]
1

== Sprawdza, czy wartości dwóch operandów są równe, czy nie. Jeśli tak, warunek staje się prawdziwy i zwraca 1, w przeciwnym razie zwraca 0.

%set a 20 
%set b 10
%puts [expr $a == $b]
0

logiczny OperaTor

&& Jeśli oba operandy są różne od zera, warunek staje się prawdziwy i zwraca 1, w przeciwnym razie zwraca 0

%set a 20 
%set b 10
%puts [expr $a && $b]
1

|| Jeśli którykolwiek z dwóch operandów jest różny od zera, warunek staje się prawdziwy i zwraca 1, w przeciwnym razie zwraca 0

%set a 0 
%set b 10
%puts [expr $a || $b]
1

! Służy do odwracania wyniku dowolnego wyrażenia. Tutaj na wyjściu widać, że wartość „a” zmieniła się teraz na 1 z 0. Podczas gdy wartość „b” zmieniła się na 0 z 1.

%set a 0 
%set b 1
%puts [expr !$a]
1
%puts [expr !$b]
0

Bitowy OperaTor

& (bitowe i) wykonują operację bitową i postępują zgodnie z poniższą tabelą.

A B A i B.
0 0 0
0 1 0
1 1 1
1 0 0

Były:-

%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 

| (bitowo lub) wykonaj operację bit po bicie i postępuj zgodnie z poniższą tabelą

A B | b
0 0 0
0 1 1
1 1 1
1 0 1

Były:-

%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 

^ (wyłącznie bitowe lub) wykonaj operację bit po bicie i postępuj zgodnie z poniższą tabelą

A B A^B
0 0 0
0 1 1
1 1 0
1 0 1

Były:-

%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

Operator ~ (negacji bitowej) zmienia każde 1 na 0 i 0 na 1, patrz tabela jako odniesienie

A ~A
0 1
1 0
%set A 7
%puts [expr ~$A]
-8

Potrójny Operator (?:)

Składnia jest

condition-expression?  expression_1: expression_2

Jeżeli warunek-wyr jest prawdziwy, obliczane jest wyr1 i zwracany jest wynik. Jeżeli cond-exp ma wartość false, obliczane jest wyrażenie exp2 i zwracany jest jego wynik. W naszym przykładzie wyrażenie 1 jest prawdziwe, ponieważ wartość A jest większa niż 6.

%set A 7
%set result [expr $A > 6 ? true : false]
%puts $result
true

Shift OperaTor

Shift operator jest oznaczony albo operatorem przesunięcia w lewo <<, albo operatorem przesunięcia w prawo >>. W przypadku operatora przesunięcia w lewo << wartość lewego operandu jest przesuwana w lewo o liczbę bitów określoną przez prawy operand.

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

W przypadku operatora przesunięcia w prawo >> wartość lewego operandu jest przesuwana w prawo o liczbę bitów określoną przez prawy operand.

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

Porównanie ciągów OperaTor

Operator porównania ciągów znaków porównuje wartość obu operandów. Jeśli wartość operandu jest taka sama, zwróci 1, w przeciwnym razie zwróci 0. W przykładzie wartość dla A i B wynosi 7, dlatego wynik zwraca 1.

Były:-

%set A 7 
%set B 7
%set result [expr $A eq $B]
%puts $result
1

Ne (jeśli wartości obu operandów są różne, zwrócona zostanie wartość 1, w przeciwnym wypadku zwrócona zostanie wartość 0)

%set A 7 
%set B 8
%set result [expr $A ne $B]
%puts $result
1

Operator potęgowania

Pow () i ** oba są takie same. Zawsze zwraca wartość zmiennoprzecinkową.

** wskazuje moc żądanego operandu.

Były:-

%set A 7
%set result [expr $A ** 2]
%puts $result
49

Lista OperaTor

Jeśli żądana wartość zostanie znaleziona na zdefiniowanej liście, zwraca 1, w przeciwnym razie zwraca 0. W przykładzie wartość 1 istnieje w zmiennej „a”, dlatego zwróci 1.

set a {1 2 3}
if {1 in $a} {
puts "ok"
} else {
puts "fail"
}
Output: ok

ni, jeśli żądana wartość zostanie znaleziona na zdefiniowanej liście, zwróci 0, w przeciwnym razie zwróci 1.

Były :-

set a {1 2 3}
if {1 ni $a} {
puts "ok"
} else {
puts "fail"
}
Output: fail

Kontrola przepływu TCL i podejmowanie decyzji

Istnieją różne polecenia sterujące przepływem i podejmowania decyzji, które są używane do zmiany przebiegu programu. Wykonania programu zawsze rozpoczynają się od góry pliku źródłowego w dół.

Instrukcja if składa się z wyrażenia logicznego, po którym następuje jedna lub więcej instrukcji.

Jeśli... oświadczenie

Składnia:-

jeśli wyrażenie? to? ciało

jeśli wyrażenie ma wartość true, wówczas wykonywana jest treść polecenia.

Były:-

set age 10

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

Output: Age is less than 20

Jeśli...inne stwierdzenie

Składnia :-

Jeśli wyrażenie? następnie body_1, w przeciwnym razie body_2

Jeśli wyrażenie ma wartość true, zwróci treść_1, w przeciwnym razie zwróci treść_2

Były:--

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

Zagnieżdżona instrukcja if..else

Oznacza to, że jedną instrukcję if lub else..if można umieścić w innej instrukcji if lub else..if.

Składnia:-

If  {expression_1} {
Body_1
If {expression_2} {
Body_2
}
}

Były:--

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

Instrukcja zamiany

Instrukcja switch umożliwia sprawdzenie równości zmiennej z listą wartości. Ocenia listę wartości i zwraca wynik tej oceny. Jeśli żadna wartość nie pasuje, zostaną zwrócone wartości domyślne.

Przykład:

#!/usr/bin/tclsh

# switch_cmd.tcl

set domain x
switch $domain {

    x { puts "x" }
    y { puts "y" }
    z { puts "z" }
    default { puts "unknown" }
}

Przełącznik zagnieżdżony

Zagnieżdżona instrukcja switch oznacza instrukcję switch wewnątrz instrukcji switch.

Składnia :-

switch <switchingstring1> {
   <matchstring1> {
      body1
      switch <switchingstring2> {
        <matchstring2> {
           body2
         }
          ...
    switch <switchingstringN> {
          <matchStringN> {
           bodyN
         }
      }
   }

Przykład:W poniższym przykładzie wartość a wynosi 100, a za pomocą tego samego kodu przełączamy instrukcję dla innej wartości b, która wynosi 200. Polecenie out wyświetli wartość zarówno dla a, jak i 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"
        }
     }
   }   
}

Wynik:-

Wartość a wynosi 100

Wartość b wynosi 200

Instrukcja pętli TCL

Instrukcja pętli umożliwia wielokrotne wykonywanie instrukcji lub grupy instrukcji. Tcl udostępnia następujące typy instrukcji pętli.

Podczas wykonywania polecenia

Gdy dany warunek jest prawdziwy, wówczas powtarza się instrukcja lub grupa instrukcji znajdujących się w treści pętli.

Składnia:

While  {condition} {
    Statements
}

Były :-

#!/usr/bin/tclsh

Set a 10

While {$a < 12} {
    Puts "a is $a"
    incr a
}

Wynik:-

a wynosi 10

a wynosi 11

W powyższym przykładzie użyto wbudowanego polecenia „incr”. Oznacza to, że wartość „a” będzie zwiększana o 1 aż do wartości maksymalnej (<12).

Na polecenie

Wykonuje sekwencję instrukcji wielokrotnie w oparciu o wartość licznika. Jest on automatycznie zwiększany lub zmniejszany podczas każdego powtórzenia pętli.

Składnia :-

For {start} {test} {next} {
Body
}

Przykład: W poniższym przykładzie wartość „i” jest ustawiona na 0 i zwiększana do wartości <5.

#!/usr/bin/tclsh

for {set i 0} {$i < 5} {incr i} {
put $i
}

Wynik:-

0 
1 
2 
3 
4

Podsumowując:

  • TCL to język skryptowy oparty na ciągach znaków, a także język proceduralny
  • Język ten jest powszechnie używany w GUI i testach
  • W TCL domyślnie wszystko jest ciągiem znaków
  • TCL to aplikacja powłoki, która odczytuje polecenia TCL ze standardowego wejścia lub z pliku i daje pożądane wyniki.
  • Program TCL powinien mieć rozszerzenie .tcl