TCL TK Eğitimi: Araç Komut Dili

TCL nedir?

TCL, TCL komutunu standart girişinden veya bir dosyadan okuyan ve istenen sonuçları veren kabuk uygulamasıdır.

TCL, dize tabanlı kodlama dili ve aynı zamanda prosedürel bir dildir. İlk olarak 1989 yılında John Osterhout tarafından oluşturulmuştur. Bu dili geliştirmenin amacı, ( ) uygulamalara kolayca yerleştirilebilmesidir. Dil genellikle GUI'ler ve testler için kullanılır. Örneğin hızlı prototipleme, Test yapmak veritabanı etkileşimi vb. TCL'de varsayılan olarak her şey bir dizedir.

Bu eğitimde şunları öğreneceksiniz:

TCL Nasıl Yürütülür

TCL kodunu çalıştırmanın iki yolu vardır

  1. Windows tabanlı uygulama burada mevcuttur tcltutor.exe dosyası
  2. Linux tabanlı uygulama

In Linux etkileşimli tercüman, TCL komut dosyalarını aşağıdaki gibi çalıştırabiliriz

TCL etkileşimli oturumuna erişmek için aşağıdaki komutu çalıştırın

TCL Eğitimi: Araç Komut Dili

TCL komut dosyaları

TCL programının .tcl uzantılı olması gerekmektedir. UNIX/LINUX'taki her komut dosyası TCL kabuk yoluyla başlar

#!/usr/bin/tclsh

Örnek:-

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

Çıktı: Selam Dünya

TCL'de mesajları konsola yazdırmak için “Puts” Komutu kullanılır. Puts'un sözdizimi aşağıdadır

koyar?-yeni satır yok mu? ?kanal kimliği? sicim

  • Yeni hat yok: Bu isteğe bağlı parametre, varsayılan komut olarak yeni satır karakterini bastırır. Her dizeye yeni bir satır koyar
  • Kanal kimliği: Standart giriş kanalı (stdin) ve standart çıkış kanalı (stdout) için kullanılan bu parametre.

Eski:-

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

TCL Oyuncu değişikliği türü

TCL'de üç çeşit oyuncu değişikliği vardır

  1. Komut ikamesi
  2. Değişken ikame
  3. Ters eğik çizgi değişikliği

Tek tek inceleyelim

Komut ikamesi

Komut yerine köşeli parantezler kullanılır.

Örnek:-

% puts [expr 1*3]
% 3

Burada köşeli parantez içindeki komut ilk olarak değerlendirilir. Sonuçlar aritmetik hesaplamayı yapmak için kullanılan .”expr” döndürülür.

Değişken ikame

TCL yardımıyla değişken ikamesi gerçekleştirir $ işaret.

Örnek:-

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

Burada “a” adında bir değişken oluşturup ona “10” değerini ayarlıyoruz.

  • puts a : Konsola “a” dizesini yazdırır ancak 'a'nın değerini yazdırmaz
  • $a koyar: 'a'nın değerini konsola yazdırır

Çalıştıralım ve doğrulayalım. Çıktıyı aşağıdaki gibi alacaksınız.

$ ./substitution.tcl

a

10

Ters eğik çizgi değişikliği

Tcl'de ters eğik çizgi, özel karakterlerden kaçmak ve uzun komutları birden fazla satıra yaymak için kullanılır. Ters eğik çizginin hemen ardından gelen herhangi bir karakter, değiştirilmeden geçerliliğini korur. Aşağıdaki örnekte, ters eğik çizgiden sonra özel karakter ” “,'nin kaldığını görebilirsiniz.

Bunu bir örnekle doğrulayalım

#!/usr/bin/tclsh

puts "This  is my  \"car\"

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

NOT: -TCL'de herhangi bir dizeye yorum yapmak için “#” kullanılır. “#” işaretinden sonraki tüm karakterler tclsh kabuk komutu tarafından dikkate alınmaz.

TCL Değişkeni

Değişken, bir değeri tutan bir tanımlayıcıdır. Başka bir deyişle değişken, değerin saklandığı bilgisayar belleğine yapılan bir referanstır.

Değişkenler “set komutu” ile oluşturulur ve tüm değişken adları büyük/küçük harfe duyarlıdır. Merhaba, Merhaba, MERHABA anlamına gelir TCL'de hepsi farklıdır. Büyük/küçük harfe duyarlı değişken için bazı örneklere bakın.

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

Çıktı:-

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

TCL Değişkenleri Oluşturma

TCL'de değişkenler oluşturmak için kullanmanız gerekir "Ayarlamak" komuta

10'u ayarla

Değişkenin değerini elde etmek için aşağıdaki gibi “$” sembolünü kullanmanız gerekir.

% $a koy

% 10

Böylece 'a' değişkeninin değerini 10 olarak alıyoruz.

TCL Komut Bilgisi mevcut

“set” komutu yukarıda gösterildiği gibi değişkenleri oluşturmak ve okumak için kullanılır. Unset komutu bir değişkeni yok etmek için kullanılır. “info exists” komutu, varName geçerli bağlamda bir değişken (veya dizi öğesi) olarak mevcutsa 1 döndürür, aksi takdirde 0 döndürür. (aşağıdaki örneğe bakın).

TCL'de "bilgi var", "bilgi işlevleri", "bilgi global" vb. gibi çeşitli "bilgi" komutları vardır. Burada “bilgi var” örneğini göreceğiz.

Eski:-

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

Farklı diş telleri ve davranışları

{} -> Kıvırcık parantez

TCL'deki küme parantezleri bağımsız değişken oluşturmak için kelimeleri bir araya getirir. Küme parantezleri ertelenen bir bloğu tanımlamak için kullanılır; başka bir deyişle, geçerli satırdaki komutun geri kalanından SONRA çalıştırılabilir. Parantez içindeki karakterler bir komuta aynen yazıldığı gibi aktarılır.

Hatırlanması gereken bazı noktalar

  1. {} parantezi içinde değişken değişimine izin verilmiyor
  2. Liste veri türünü oluşturmak için kullanılır

Örnek:-

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

%set numarası {1 2 3 4 5} -> Burada sayı bir liste veri türüdür

%$sayıyı koyar

%1 2 3 4 5

[] -> köşeli ayraçlar

Köşeli parantezler iç içe komut oluşturmak için kullanılır. Basitçe söylemek gerekirse, bir komutun çıktısı başka bir komuta argüman olarak geçirilir. Köşeli parantezler, geçerli satırdaki komutun geri kalanından ÖNCE çalıştırılan bir bloğu tanımlamak için kullanılır ve sonuç satıra yerleştirilir.

Eski: -

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

() -> yuvarlak parantezler

Bu komut, dizi veri türünü oluşturmak ve ayrıca operatör önceliğini belirtmek için kullanılır.

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

Burada “a”, değeri 10 ve 20 olan bir dizidir. Anahtarları, anahtar değer çiftlerini ve dizi değerlerini yazdırmak için aşağıdaki komutlara bakın.

% 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

a dizisinin “N'inci” değerini yazdırmak için Puts $a(N) kullanacağız.

TCL Komut satırı bağımsız değişkenleri

Komut satırından bir betiğe iletilen veri öğeleri bağımsız değişkenler olarak bilinir. Bir Tcl betiğine komut satırı bağımsız değişkenlerinin sayısı genel değişken olarak iletilir argc . Bir Tcl betiğinin adı, betiğe genel değişken olarak aktarılır argv0 ve komut satırı argümanlarının geri kalanı bir liste olarak iletilir. bağımsız değişken.

TCL'nin önceden tanımlanmış 3 değişkeni vardır:

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

$argv   -> indicates list of arguments

$argv0  -> indicates the name of script

Eski:-

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

çıktı:-

  • Komut dosyalarına iletilen bağımsız değişken sayısı: 3
  • Betiğe aktarılan argümanların listesi: 10 20 30
  • Komut dosyasının adı: arg-script.tcl

TCL İfadesi ve Operator

İfade, operand ve operatörlerden oluşturulur. "expr" komutuyla değerlendirilir. Operators öncelik ve ilişkiselliğe göre değerlendirilir. TCL dili aşağıdaki gibi yerleşik operatörlere sahiptir

OperaTor Kategorisi sembol Öncelik/İlişkililik
Aritmetik Operator + - * / % Soldan Sağa
İlişkisel Operator == != < > <= >= Soldan sağa
mantıksal Operator && || ! Soldan sağa
Bitsel Operator & | ^ ~ Soldan sağa
Üçlü Operator ?: Sağdan sola
Shift Operator << >> Soldan sağa
Dizi Karşılaştırma Operator eşit ne Soldan sağa
Üs Operator ** Soldan sağa
Liste Operator ni'de Soldan sağa

Aritmetik Operator

Bir TCL ifadesi işlenenlerin, operatörlerin ve parantezlerin birleşiminden oluşur. TCL'deki Aritmetik operatörlerin örneğini görelim

+ İki veya daha fazla işlenen ekleyin

Eski:-

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

- İki veya daha fazla işleneni çıkarır

Eski:-

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

*İki veya daha fazla işleneni çarpma

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

/ Payı paydaya böl

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

% Modül operatörü payı paydaya böler ancak hatırlatıcıyı döndürür

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

İlişkisel Operator

Sol işlenenin değerinin sağ işlenenin değerinden büyük olup olmadığını kontrol eder. Evetse, koşul doğru olur ve 1 değerini döndürür, aksi takdirde 0 değerini döndürür.

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

Sol işlenenin değerinin sağ işlenenin değerinden küçük olup olmadığını kontrol edin. Evetse, koşul doğru olur ve 1 değerini döndürür, aksi takdirde 0 değerini döndürür

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

>= Sol işlenenin değerinin sağ işlenenin değerinden büyük veya eşit olup olmadığını kontrol eder, eğer evet ise koşul doğru olur ve 1 değerini döndürür, aksi halde 0 değerini döndürür

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

<= Sol işlenenin değerinin sağ işlenenin değerinden küçük veya ona eşit olup olmadığını kontrol eder, evet ise koşul doğru olur ve 1 değerini döndürür, aksi takdirde 0 değerini döndürür

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

!= İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, eğer değerler eşit değilse koşul doğru olur ve 1 döndürür, aksi halde 0 döndürür

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

== İki işlenenin değerlerinin eşit olup olmadığını kontrol eder, eğer öyleyse koşul doğru olur ve 1 değerini döndürür, aksi halde 0 değerini döndürür

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

mantıksal Operator

&& Her iki işlenen de sıfırdan farklıysa, koşul doğru olur ve 1 değerini döndürür, aksi halde 0 değerini döndürür

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

|| İki işlenenden herhangi biri sıfırdan farklıysa, koşul doğru olur ve 1 değerini döndürür, aksi halde 0 değerini döndürür

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

! Herhangi bir ifadenin sonucunu tersine çevirmek için kullanılır. Burada çıktıda 'a' değerinin 1'dan 0'e çıktığını görüyorsunuz. 'b' değeri ise 0'den 1 oldu.

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

Bitsel Operator

& (bitsel ve) bit bazında işlem gerçekleştirir ve işlem için aşağıdaki tabloyu takip eder.

A B A ve B
0 0 0
0 1 0
1 1 1
1 0 0

Eski:-

%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 

| (bit düzeyinde veya) bit bazında işlem yapın ve aşağıdaki tabloyu takip edin

A B bir | B
0 0 0
0 1 1
1 1 1
1 0 1

Eski:-

%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 

^ (bit düzeyinde özel veya) bit bazında işlem yapın ve aşağıdaki tabloyu takip edin

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

Eski:-

%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

~ (bit düzeyinde olumsuzlama) operatörü her 1'i 0'a ve 0'ı 1'e değiştirir, referans olarak tabloyu takip edin

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

Üçlü Operator ( ? :)

sözdizimi

condition-expression?  expression_1: expression_2

Koşul-ifade doğruysa, ifade1 değerlendirilir ve sonuç döndürülür. Koşul-ifadesi yanlışsa, ifade2 değerlendirilir ve sonucu döndürülür. Örneğimizde A'nın değeri 1'dan büyük olduğundan exp6 doğrudur.

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

Shift Operator

Shift operatör << sol kaydırma operatörü veya >> sağ kaydırma operatörü ile gösterilir. << sol kaydırma operatörü için, sol işlenenin değeri sağ işlenen tarafından belirtilen bit sayısı kadar sola taşınır.

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

>> sağa kaydırma operatörü için, sol işlenenin değeri, sağ işlenen tarafından belirtilen bit sayısı kadar sağa taşınır.

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

Dizi Karşılaştırma Operator

Dize karşılaştırma operatörü her iki işlenenin değerini karşılaştırır. İşlenenin değeri aynıysa, 1 döndürür, aksi takdirde 0 döndürür. Örnekte hem A hem de B için değer 7'dir, bu nedenle sonuç 1 döndürür.

Eski:-

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

Ne (her iki işlenenin değeri farklıysa 1 değerini döndürür, aksi halde 0 değerini döndürür)

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

Üs alma operatörü

Pow () ve ** her ikisi de aynıdır. Her zaman kayan değer döndürür.

** istenilen işlenenin gücünü gösterir.

Eski:-

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

Liste Operator

İstenilen değer tanımlanan listede bulunursa 1 değerini döndürür, aksi halde 0 değerini döndürür. Örnekte 'a' değişkeninde 1 değeri mevcut olduğundan 1 değerini döndürür.

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

ni, eğer gerekli değer tanımlanmış listede bulunursa 0 değerini döndürür, aksi halde 1 değerini döndürür.

Eski :-

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

TCL akış kontrolü ve karar verme

Bir programın akışını değiştirmek için kullanılan çeşitli akış kontrolü ve karar verme komutları vardır. Program yürütmeleri her zaman kaynak dosyanın üstünden altına doğru başlar.

If ifadesi Boolean ifadesinin ardından bir veya daha fazla ifadeden oluşur.

Eğer ... ifade

Sözdizimi:-

eğer ifade ?sonra? vücut

eğer ifade doğru olarak değerlendirilirse, komut gövdesi yürütülür.

Eski:-

set age 10

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

Output: Age is less than 20

If ... else ifadesi

Sözdizimi: -

Eğer ifade? sonra gövde_1 yoksa gövde_2

İfade doğru olarak değerlendirilirse gövde_1 değerini döndürür, aksi halde gövde_2 değerini döndürür

Eski:--

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

İç içe if..else ifadesi

Bu, bir if veya else..if ifadesinin başka bir if veya else..if ifadesinin içine yerleştirilebileceği anlamına gelir.

Sözdizimi:-

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

Eski:--

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

Anahtar bildirimi

Switch ifadesi, bir değişkenin bir değerler listesine göre eşitlik açısından test edilmesini sağlar. Değer listesini değerlendirir ve bu değerlendirmenin sonucunu döndürür. Hiçbir değer eşleşmezse varsayılan değerler döndürülür.

Örnek E-posta:

#!/usr/bin/tclsh

# switch_cmd.tcl

set domain x
switch $domain {

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

İç içe anahtar

İç içe switch ifadesi, bir switch ifadesinin içindeki switch ifadesi anlamına gelir.

Sözdizimi :-

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

Örnek E-posta: Aşağıdaki örnekte a'nın değeri 100'dür ve aynı kodla switch ifadesini başka bir b değeri için 200'e çeviriyoruz. Çıktı hem a hem de b için değeri gösterecektir.

#!/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"
        }
     }
   }   
}

Çıktı:-

a'nın değeri 100'dür

b'nin değeri 200

TCL Döngü bildirimi

Döngü ifadesi bir ifadenin veya ifade grubunun birden fazla kez yürütülmesine izin verir. Tcl aşağıdaki döngü ifadesi türlerini sağlar.

Komut verirken

Belirli bir koşul doğru olduğunda döngü gövdesindeki bir ifade veya ifade grubu tekrarlanır.

Sözdizimi:

While  {condition} {
    Statements
}

Eski :-

#!/usr/bin/tclsh

Set a 10

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

Çıktı:-

a 10'dur

a 11'dur

Yukarıdaki örnekte "incr" yerleşik komutu kullanılmıştır. Bu, 'a' değerinin maksimum değere (<1) kadar 12 artırılacağı anlamına gelir.

Komut için

Bir sayaç değerine bağlı olarak bir dizi ifadeyi birden çok kez yürütür. Döngünün her tekrarında otomatik olarak artırılır veya azaltılır.

Sözdizimi :-

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

Örnek E-posta: Aşağıdaki örnekte 'i' değeri 0 olarak ayarlanmış ve <5 değerine kadar artırılmıştır.

#!/usr/bin/tclsh

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

Çıktı:-

0 
1 
2 
3 
4

Özet:

  • TCL, dize tabanlı kodlama dili ve aynı zamanda prosedürel bir dildir
  • Dil genellikle GUI'ler ve testler için kullanılır.
  • TCL'de varsayılan olarak her şey dizedir
  • TCL, TCL komutunu standart girişinden veya bir dosyadan okuyan ve istenen sonuçları veren kabuk uygulamasıdır.
  • TCL programı .tcl uzantılı olmalıdır