TCL TK チュートリアル: ツール コマンド言語

TCLとは何ですか?

TCL は、標準入力またはファイルから TCL コマンドを読み取り、必要な結果を与えるシェル アプリケーションです。

TCL は文字列ベースのスクリプト言語であり、手続き型言語でもあります。 この言語は、1989 年に John Osterhout によって初めて作成されました。この言語を開発した目的は、簡単に埋め込まれた inti () アプリケーションです。 この言語は、GUI とテストによく使用されます。 たとえば、ラピッドプロトタイピング、 テスト データベースの対話など。TCL ではデフォルトですべてが文字列です。

このチュートリアルでは、次のことを学びます。

TCLの実行方法

TCL コードを実行するには XNUMX つの方法があります

  1. Windows ベースのアプリケーションはここから入手できます tcltutor exeファイル
  2. Linuxベースのアプリケーション

In Linux 対話型インタープリターでは、以下のように TCL スクリプトを実行できます。

TCL インタラクティブ セッションにアクセスするには、次のコマンドを実行します。wing command

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 の構文は次のとおりです。

を入れますか?-改行はありません? ?チャンネルID? 弦

  • 改行なし: このオプションのパラメーターは、デフォルトのコマンドで改行文字を抑制します。 各文字列に改行を入れます
  • チャンネルID: このパラメータは標準入力チャンネル (stdin) と標準出力チャンネル (stdout) に使用されます。

元:-

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

TCL置換タイプ

TCLにはXNUMX種類の置換があります

  1. コマンド置換
  2. 変数置換
  3. バックスラッシュの置換

一つ一つ勉強していきましょう

コマンド置換

正方形である brackets コマンドの置換に使用されます。

例:-

% puts [expr 1*3]
% 3

ここで正方形の間のコマンド brackets が最初に評価されます。結果は算術計算の実行に使用される「expr」として返されます。

変数置換

TCL は、次の助けを借りて変数置換を実行します。 $ 符号。

例:-

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

ここでは、「a」という変数を作成し、値「10」を設定します。

  • put a : 文字列「a」をコンソールに出力しますが、「a」の値は出力しません
  • put $a : 'a' の値をコンソールに出力します

実行して確認してみましょう。 以下のような出力が得られます。

$ ./substitution.tcl

a

10

バックスラッシュの置換

Tcl では、バックスラッシュは特殊文字をエスケープするためや、長いコマンドを複数行にまたがる場合に使用されます。 任意の文字がすぐにフォローされますwing バックスラッシュは置換なしでそのまま残ります。 以下の例では、バックスラッシュの後に特殊文字「 」が残っていることがわかります。

これを例で検証してみましょう

#!/usr/bin/tclsh

puts "This  is my  \"car\"

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

ノート: -TCL 内の任意の文字列をコメントするには「#」が使用されます。 「#」以降の文字はすべて、tclsh シェル コマンドによって無視されます。

TCL変数

変数とは、値を保持する識別子です。 言い換えれば、変数は値が保存されるコンピュータ メモリへの参照です。

変数は「set コマンド」によって作成され、すべての変数名は大文字と小文字が区別されます。 つまり、TCL では Hello、Hello、HELLO はすべて異なります。 大文字と小文字を区別する変数の例を見てください。

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

出力:-

% puts $name
% Technoit

%puts  $Name
%Technoit_1

%puts $NAME
%Technoit_2

TCL変数の作成

TCL で変数を作成するには、次を使用する必要があります。 "セットする" command

10を設定します

変数の値を取得するには、次のように「$」記号を使用する必要があります

% $a を入れる

10%

したがって、変数「a」の値は 10 として取得されます。

TCLコマンド情報が存在します

上記のように、「set」コマンドは変数の作成と読み取りに使用されます。 unset コマンドは変数を破棄するために使用されます。 「info doesn't」コマンドは、varName が現在のコンテキストに変数 (または配列要素) として存在する場合は 1 を返し、それ以外の場合は XNUMX を返します。wise 0 を返します (以下の例を参照)。

TCL には、「info 存在」、「info 関数」、「info global」など、さまざまな「info」コマンドがあります。 ここでは「情報が存在する」の例を見てみましょう。

元:-

% 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} -> ここで、number はリスト データ型です。

%puts $number

%1 2 3 4 5

[] -> 角中括弧

正方形である brackets ネストされたコマンドを作成するために使用されます。簡単に言うと、あるコマンドの出力が引数として別のコマンドに渡されます。四角 brackets 現在の行のコマンドの残りの部分の前に実行されるブロックを定義するために使用され、結果がその行に置き換えられます。

元: -

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

() -> 丸括弧

このコマンドは、配列データ型を作成し、次のことを示すために使用されます。 operaトール優先。

% 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

配列 a の「N 番目」の値を出力するには、Puts $a(N) を使用します。

TCL コマンドライン引数

コマンドラインからスクリプトに渡されるデータ項目は引数と呼ばれます。 Tcl スクリプトへのコマンド ライン引数の数はグローバル変数として渡されます。 argc 。 Tcl スクリプトの名前は、グローバル変数としてスクリプトに渡されます。 argv0 、残りのコマンドライン引数はリストとして渡されます。 引数.

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タ

式は以下から構築されます operaNDSと operaトール。 「expr」コマンドで評価されます。 Operators は、優先順位と結合性に基づいて評価されます。 TCL言語が組み込まれています opera以下のようなトル

Operaカテゴリー シンボル 優先順位/結合性
算術 Operaタ + - * / % 左から右へ
リレーショナル Operaタ == != < > <= >= 左から右へ
論理的 Operaタ && || ! 左から右へ
ビットwise Operaタ & | ^ ~ 左から右へ
ターナリー Operaタ ?: 右から左へ
Shift Operaタ << >> 左から右へ
文字列の比較 Operaタ 等式 左から右へ
累乗 Operaタ ** 左から右へ
リスト Operaタ 左から右へ

算術 Operaタ

TCL 式は次の組み合わせで構成されます。 operaNDS、 operaトールと括弧。算術の例を見てみましょう operaTCLのトール

+ 2 つ以上追加 operaNDS

元:-

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

- 2 つ以上の引き算 operaNDS

元:-

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

※2つ以上掛けます operaNDS

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

/ 分子を分母で割る

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

% 係数 operator は分子を除分子で除算しますが、リマインダーを返します

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

リレーショナル Operaタ

left の値が正しいかどうかを確認します operand は右の値より大きい operand。 「はい」の場合、条件は真になり、1 を返し、それ以外の場合は 0 を返します。

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

left の値を確認する operand は右の値より小さい operand。 「はい」の場合、条件は真になり、1 を返し、それ以外の場合は 0 を返します。

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

>= 左の値が正しいかどうかを確認します operand は right の値以上です operaそして、yesの場合は条件がtrueになり、1を返します。それ以外の場合は0を返します。

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

<= 左の値が正しいかどうかを確認します operand は right の値以下です operaそして、yesの場合は条件がtrueになり、1を返します。それ以外の場合は0を返します。

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

!= 2 つの値が一致するかどうかを確認します。 operands が等しいかどうか、値が等しくない場合は条件が true になり、1 を返し、それ以外の場合は 0 を返します。

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

== 2 つの値が一致するかどうかを確認します operands が等しいか等しくなく、yes の場合は条件が true になり、1 を返します。それ以外の場合は 0 を返します。

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

論理的 Operaタ

&& 両方の場合、 operands がゼロ以外の場合、条件は true になり、1 を返します。それ以外の場合は 0 を返します。

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

|| 2 つのいずれかであれば、 operands がゼロ以外の場合、条件が true になり、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

ビットwise Operaタ

& (少しwise そして)少しずつ実行します opera以下の表に従ってください。 operaる。

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 

| (少しwise または)少しずつ実行します opera以下の表に従ってください

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 

^ (ちょっとwise 排他的論理和) 少しずつ実行します opera以下の表に従ってください

A B 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

~(ちょっとwise 否定) operator は 1 から 0、0 から 1 にそれぞれ変化します。表を参考にしてください。

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

ターナリー Operaトール ( ?:)

構文は

condition-expression?  expression_1: expression_2

condition-exp が true の場合、exp1 が評価され、結果が返されます。 cond-exp が false の場合、exp2 が評価され、その結果が返されます。 この例では、A の値が 1 より大きいため、exp6 は true になります。

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

Shift Operaタ

Shift operator は << left のいずれかで表されます shift operator、または >> 右から shift operaトル。 << 左の場合 shift operaトール、左 operands 値は、右で指定されたビット数だけ左に移動されます。 operaND。

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

>>右の場合 shift operaトール、左 operands 値は右で指定されたビット数だけ右に移動されます。 operaND。

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

文字列の比較 Operaタ

文字列比較 operaトールコンプares 両方の価値 operands。の値が operand が同じ場合、1 が返され、それ以外の場合は 0 が返されます。この例では、A と B の両方の値が 7 であるため、結果は 1 を返します。

元:-

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

Ne (両方の値の場合) operaと が異なる場合は 1 を返し、それ以外の場合は 0 を返します)

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

累乗 operaタ

Pow() と ** はどちらも同じです。 常に浮動小数点値を返します。

** は必要な電力を示します。 operaND。

元:-

%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

ni、必要な値が定義されたリスト内で見つかった場合は 0 を返し、それ以外の場合は 1 を返します。

元 :-

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

TCL のフロー制御と意思決定

プログラムの流れを変更するために使用されるさまざまなフロー制御および意思決定コマンドがあります。 プログラムの実行は常にソース ファイルの先頭から最後まで始まります。

If ステートメントは、ブール式とそれに続く XNUMX つ以上のステートメントで構成されます。

If ... ステートメント

構文:-

if expr ?then? 体

expr が true と評価された場合、コマンドの本体が実行されます。

元:-

set age 10

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

Output: Age is less than 20

If ...else ステートメント

構文 :-

if 式 ? 次に body_1、それ以外の場合 body_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

スイッチステートメント

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
         }
      }
   }

: 続きましてwing たとえば、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 は以下を提供しますwing ループ文の種類。

コマンド中

指定された条件が true の場合、ループ本体内のステートメントまたはステートメントのグループが繰り返されます。

構文:

While  {condition} {
    Statements
}

元 :-

#!/usr/bin/tclsh

Set a 10

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

出力:-

aは10です

aは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 拡張子が必要です