Hướng dẫn TCL TK: Ngôn ngữ lệnh công cụ
TCL là gì?
TCL là ứng dụng shell đọc lệnh TCL từ đầu vào tiêu chuẩn của nó hoặc từ một tệp và đưa ra kết quả mong muốn.
TCL là ngôn ngữ kịch bản dựa trên chuỗi và cũng là ngôn ngữ thủ tục. Nó được tạo ra lần đầu tiên bởi John Osterhout vào năm 1989. Mục đích của việc phát triển ngôn ngữ này là để dễ dàng nhúng các ứng dụng inti ( ). Ngôn ngữ này thường được sử dụng cho GUI và thử nghiệm. Ví dụ, tạo mẫu nhanh, Kiểm tra tương tác cơ sở dữ liệu, v.v. Trong TCL theo mặc định, mọi thứ đều là một chuỗi.
Trong hướng dẫn này, bạn sẽ học-
- TCL là gì
- Cách thực hiện TCL
- Tập lệnh TCL
- Loại thay thế TCL
- Biến TCL
- Biểu thức TCL và Operator
- Kiểm soát luồng TCL và ra quyết định
Cách thực hiện TCL
Có hai cách để thực thi mã TCL
- Windows ứng dụng dựa trên có sẵn ở đây tập tin exe tcltutor
- Ứng dụng dựa trên Linux
In Linux trình thông dịch tương tác, chúng ta có thể thực thi các tập lệnh TCL như bên dưới
Để truy cập phiên tương tác TCL, hãy thực hiện lệnh sau
Tập lệnh TCL
Chương trình TCL phải có phần mở rộng .tcl. Mọi tập lệnh trong UNIX/LINUX đều bắt đầu bằng đường dẫn shell TCL
#!/usr/bin/tclsh
Thí dụ:-
#!/usr/bin/tclsh Puts "Hello World" Script execution:- $ chmod +x helloworld.tcl $ ./helloworld.tcl
Đầu ra: Chào thế giới
Trong TCL, Lệnh “Puts” được sử dụng để in thông báo tới bảng điều khiển. Cú pháp của lệnh put như bên dưới
đặt?-nonewline? ?kênh ID? sợi dây
- Không có dòng mới: Tham số tùy chọn này chặn ký tự dòng mới theo lệnh mặc định. Nó đặt một dòng mới cho mỗi chuỗi
- Kênh ID: Thông số này dùng cho kênh đầu vào tiêu chuẩn (stdin) và kênh đầu ra tiêu chuẩn (stdout).
Bán tại:-
%puts "Hello World" % Hello World %puts stdout "Hello World" % Hello World
Loại thay thế TCL
Có ba loại thay thế trong TCL
- Thay thế lệnh
- Thay thế biến
- Thay thế dấu gạch chéo ngược
Chúng ta hãy nghiên cứu từng cái một
Thay thế lệnh
Dấu ngoặc vuông được sử dụng để thay thế lệnh.
Thí dụ:-
% puts [expr 1*3] % 3
Ở đây, lệnh giữa các dấu ngoặc vuông được đánh giá trước. Kết quả được trả về . ”expr” được sử dụng để thực hiện phép tính số học.
Thay thế biến
TCL thực hiện thay thế biến với sự trợ giúp của $ ký tên.
Thí dụ:-
#!/usr/bin/tclsh set a 10 puts a puts $a
Ở đây chúng ta tạo một biến có tên là “a” và đặt giá trị “10” cho nó.
- đặt a : Nó sẽ in chuỗi “a” nhưng không in giá trị của 'a' ra bàn điều khiển
- đặt $a : Nó sẽ in giá trị của 'a' ra bàn điều khiển
Hãy thực hiện và xác minh nó. Bạn sẽ nhận được kết quả như dưới đây.
$ ./substitution.tcl
a
10
Thay thế dấu gạch chéo ngược
Trong Tcl, dấu gạch chéo ngược được sử dụng để thoát các ký tự đặc biệt cũng như để trải dài các lệnh dài trên nhiều dòng. Bất kỳ ký tự nào ngay sau dấu gạch chéo ngược sẽ đứng mà không cần thay thế. Trong ví dụ bên dưới, bạn có thể thấy ký tự đặc biệt ” “, vẫn còn sau dấu gạch chéo ngược.
Hãy xác minh điều này bằng một ví dụ
#!/usr/bin/tclsh puts "This is my \"car\" $ ./backslashsubstitution.tcl This is my "car"
GHI CHÚ: -Để bình luận bất kỳ chuỗi nào trong TCL “#” được sử dụng. Tất cả các ký tự sau dấu “#” đều bị lệnh shell tclsh bỏ qua.
Biến TCL
Biến là một mã định danh chứa một giá trị. Nói cách khác, biến là tham chiếu đến bộ nhớ máy tính, nơi lưu trữ giá trị.
Các biến được tạo bằng “lệnh đặt” và tất cả các tên biến đều phân biệt chữ hoa chữ thường. Nó có nghĩa là xin chào, xin chào, xin chào tất cả đều khác nhau ở TCL. Hãy xem một số ví dụ về biến phân biệt chữ hoa chữ thường.
% set name Techoit % set Name Technoit_1 % set NAME Technoit_2
Đầu ra: -
% puts $name % Technoit %puts $Name %Technoit_1 %puts $NAME %Technoit_2
Tạo biến TCL
Để tạo biến trong TCL, bạn cần sử dụng "bố trí" lệnh
Đặt số 10
Để lấy giá trị của biến phải sử dụng ký hiệu “$” như
% đặt $a
% 10
Vì vậy, chúng ta nhận được giá trị của biến 'a' là 10.
Thông tin lệnh TCL tồn tại
Lệnh “set” được sử dụng để tạo và đọc các biến như được hiển thị ở trên. Lệnh unset được sử dụng để hủy một biến. Lệnh “info exists” trả về 1 nếu varName tồn tại dưới dạng một biến (hoặc một phần tử mảng) trong ngữ cảnh hiện tại, nếu không thì trả về 0. (xem ví dụ bên dưới).
Có nhiều lệnh “thông tin” khác nhau trong TCL như “thông tin tồn tại”, “chức năng thông tin”, “thông tin toàn cầu”, v.v. Ở đây chúng ta sẽ thấy một ví dụ về “thông tin tồn tại”.
Bán tại:-
% set a 20 % puts $a % 20 % puts [info exists a] % 1 % unset a %puts [info exists a] % 0
Niềng răng khác nhau và hành vi của chúng
{} -> Dấu ngoặc nhọn
Dấu ngoặc nhọn trong TCL nhóm các từ lại với nhau để trở thành đối số. Dấu ngoặc nhọn được sử dụng để xác định một khối bị trì hoãn - nói cách khác, nó có thể được chạy SAU phần còn lại của lệnh trên dòng hiện tại. Các ký tự trong dấu ngoặc nhọn được truyền tới lệnh chính xác như được viết.
Một số điểm cần nhớ
- Không được phép thay thế biến trong dấu ngoặc nhọn {}
- Nó được sử dụng để tạo kiểu dữ liệu danh sách
Thí dụ:-
% set x 10 % puts {$x} % $x
%set number {1 2 3 4 5} -> Số ở đây là kiểu dữ liệu danh sách
% đặt số $
% 1 2 3 4 5
[] -> dấu ngoặc vuông
Dấu ngoặc vuông được sử dụng để tạo lệnh lồng nhau. Nói một cách đơn giản, đầu ra của một lệnh được truyền dưới dạng tham số cho lệnh khác. Dấu ngoặc vuông được sử dụng để xác định một khối chạy TRƯỚC phần còn lại của lệnh trên dòng hiện tại và kết quả được thay thế vào dòng đó.
Bán tại: -
% set x 10 % puts "y : [set y [set x 10]]" %y : 10 % puts "x : $x" %x : 10
() -> niềng răng tròn
Lệnh này được sử dụng để tạo kiểu dữ liệu mảng và cũng cho biết mức độ ưu tiên của toán tử.
% set a(1) 10 % set a(2) 20
Ở đây “a” là một mảng có giá trị 10 và 20. Xem các lệnh bên dưới để in các khóa, cặp giá trị khóa và giá trị của mảng.
% 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
Để in giá trị “Nth” của mảng a, chúng ta sẽ sử dụng Puts $a(N)
Đối số dòng lệnh TCL
Các mục dữ liệu được truyền đến tập lệnh từ dòng lệnh được gọi là đối số. Số lượng đối số dòng lệnh cho tập lệnh Tcl được truyền dưới dạng biến toàn cục argc . Tên của tập lệnh Tcl được truyền cho tập lệnh dưới dạng biến toàn cục argv0 và phần còn lại của các đối số dòng lệnh được chuyển dưới dạng danh sách trong argv.
TCL có 3 biến được xác định trước như
$argc -> indicates the number of arguments passed to the script $argv -> indicates list of arguments $argv0 -> indicates the name of script
Bán tại:-
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
đầu ra:-
- Số lượng đối số được truyền cho tập lệnh: 3
- Danh sách các đối số được truyền vào tập lệnh: 10 20 30
- Tên của tập lệnh là: arg-script.tcl
Biểu thức TCL và Operator
Biểu thức được xây dựng từ các toán hạng và toán tử. Nó được đánh giá bằng lệnh "expr". Operators được đánh giá dựa trên mức độ ưu tiên và tính kết hợp. Ngôn ngữ TCL có các toán tử tích hợp như sau
Operadanh mục tor | Mã | Ưu tiên/Kết hợp |
---|---|---|
toán học Operator | + - * / % | Từ trái sang phải |
Quan hệ Operator | == != < > <= >= | Trái sang Phải |
logic Operator | && || ! | Trái sang Phải |
Bitwise Operator | & | ^ ~ | Trái sang Phải |
Đệ tam Operator | ?: | Phải sang trái |
Shift Operator | << >> | Trái sang Phải |
So sánh chuỗi Operator | tương đương | Trái sang Phải |
Phép tính Operator | ** | Trái sang Phải |
Danh sách Operator | trong ni | Trái sang Phải |
toán học Operator
Biểu thức TCL bao gồm sự kết hợp của toán hạng, toán tử và dấu ngoặc đơn. Hãy xem ví dụ về toán tử số học trong TCL
+ Thêm hai hoặc nhiều toán hạng
Bán tại:-
%set a 10 %set b 20 %puts [expr $a + $b] 30
- Trừ hai hoặc nhiều toán hạng
Bán tại:-
%set a 20 %set b 10 %puts [expr $a - $b] 10
* Nhân hai hoặc nhiều toán hạng
%set a 20 %set b 10 %puts [expr $a * $b] 200
/ Chia tử số cho tử số
%set a 20 %set b 10 %puts [expr $a / $b] 2
Toán tử % mô đun chia tử số cho số khử nhưng trả về lời nhắc
%set a 20 %set b 10 %puts [expr $a % $b] 0
Quan hệ Operator
Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn giá trị của toán hạng bên phải hay không. Nếu có thì điều kiện trở thành đúng và trả về 1, ngược lại trả về 0.
%set a 20 %set b 10 %puts [expr $a > $b] 1
Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn giá trị của toán hạng bên phải hay không. Nếu có thì điều kiện trở thành đúng và trả về 1, ngược lại trả về 0
%set a 10 %set b 20 %puts [expr $a < $b] 1
>= Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành đúng và trả về 1 nếu không trả về 0
%set a 20 %set b 10 %puts [expr $a >= $b] 1
<= Kiểm tra xem giá trị của toán hạng bên trái có nhỏ hơn hoặc bằng giá trị của toán hạng bên phải hay không, nếu có thì điều kiện trở thành đúng và trả về 1, ngược lại trả về 0
%set a 20 %set b 10 %puts [expr $a <= $b] 0
!= Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu giá trị không bằng thì điều kiện trở thành true và trả về 1, ngược lại trả về 0
%set a 20 %set b 10 %puts [expr $a != $b] 1
== Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không, nếu có thì điều kiện trở thành đúng và trả về 1 nếu không trả về 0
%set a 20 %set b 10 %puts [expr $a == $b] 0
logic Operator
&& Nếu cả hai toán hạng đều khác 1 thì điều kiện trở thành đúng và trả về 0, ngược lại trả về XNUMX
%set a 20 %set b 10 %puts [expr $a && $b] 1
|| Nếu bất kỳ toán hạng nào trong hai toán hạng khác 1 thì điều kiện trở thành đúng và trả về 0, ngược lại trả về XNUMX
%set a 0 %set b 10 %puts [expr $a || $b] 1
! Được sử dụng để đảo ngược kết quả của bất kỳ biểu thức nào. Ở đây, trong kết quả đầu ra, bạn có thể thấy giá trị của 'a' hiện đã trở thành 1 từ 0. Trong khi giá trị của 'b' đã trở thành 0 từ 1.
%set a 0 %set b 1 %puts [expr !$a] 1 %puts [expr !$b] 0
Bitwise Operator
& (bitwise and) thực hiện thao tác từng bit và tuân theo bảng bên dưới để thực hiện thao tác.
A | B | A & B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
1 | 0 | 0 |
Bán tại:-
%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
| (bitwise or) thực hiện thao tác từng bit và làm theo bảng bên dưới
A | B | Một | b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 1 | 1 |
1 | 0 | 1 |
Bán tại:-
%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
^ (loại trừ bit hoặc) thực hiện thao tác từng bit và làm theo bảng bên dưới
A | B | A ^ B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 1 | 0 |
1 | 0 | 1 |
Bán tại:-
%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
~ (phủ định bit) toán tử thay đổi mỗi 1 thành 0 và 0 thành 1, theo bảng tham chiếu
A | ~A |
---|---|
0 | 1 |
1 | 0 |
%set A 7 %puts [expr ~$A] -8
Đệ tam Operator ( ? :)
Cú pháp là
condition-expression? expression_1: expression_2
Nếu điều kiện-exp đúng, exp1 được đánh giá và kết quả được trả về. Nếu cond-exp sai, exp2 sẽ được đánh giá và kết quả của nó sẽ được trả về. Trong ví dụ của chúng tôi, exp1 đúng khi giá trị của A lớn hơn 6.
%set A 7 %set result [expr $A > 6 ? true : false] %puts $result true
Shift Operator
Shift toán tử được biểu thị bằng toán tử dịch chuyển trái << hoặc toán tử dịch chuyển phải >>. Đối với toán tử dịch chuyển trái <<, giá trị toán hạng trái được dịch chuyển sang trái theo số bit được chỉ định bởi toán hạng phải.
%set A 7 %set result [expr $A << 2] %puts $result
Đối với toán tử dịch chuyển >>, giá trị toán hạng bên trái được di chuyển sang phải theo số bit được chỉ định bởi toán hạng bên phải.
%set A 7 %set result [expr $A >> 2] %puts $result
So sánh chuỗi Operator
Toán tử so sánh chuỗi so sánh giá trị của cả hai toán hạng. Nếu giá trị của toán hạng giống nhau, thì nó sẽ trả về 1, nếu không thì trả về 0. Trong ví dụ, giá trị cho cả A và B là 7, do đó kết quả trả về 1.
Bán tại:-
%set A 7 %set B 7 %set result [expr $A eq $B] %puts $result 1
Ne (nếu giá trị của cả hai toán hạng khác nhau thì nó sẽ trả về 1, nếu không thì trả về 0)
%set A 7 %set B 8 %set result [expr $A ne $B] %puts $result 1
Toán tử lũy thừa
Pow() và ** đều giống nhau. Nó luôn trả về giá trị nổi.
** cho biết sức mạnh của toán hạng mong muốn.
Bán tại:-
%set A 7 %set result [expr $A ** 2] %puts $result 49
Danh sách Operator
Nếu giá trị bắt buộc được tìm thấy trong danh sách đã xác định, nó sẽ trả về 1, nếu không thì trả về 0. Trong ví dụ, giá trị 1 tồn tại trong biến 'a' do đó nó sẽ trả về 1.
set a {1 2 3} if {1 in $a} { puts "ok" } else { puts "fail" } Output: ok
ni, nếu giá trị bắt buộc được tìm thấy trong danh sách đã xác định thì nó sẽ trả về 0, nếu không thì trả về 1.
Bán tại :-
set a {1 2 3} if {1 ni $a} { puts "ok" } else { puts "fail" } Output: fail
Kiểm soát luồng TCL và ra quyết định
Có nhiều lệnh điều khiển luồng và ra quyết định khác nhau được sử dụng để thay đổi luồng của chương trình. Việc thực thi chương trình luôn bắt đầu từ đầu tệp nguồn đến cuối tệp.
Câu lệnh if bao gồm biểu thức Boolean theo sau là một hoặc nhiều câu lệnh.
Nếu ... câu lệnh
Cú pháp: -
nếu expr thì? thân hình
nếu expr được đánh giá là true thì phần thân lệnh sẽ được thực thi.
Bán tại:-
set age 10 if {$age < 20} { puts "Age is less than 20" } Output: Age is less than 20
Câu lệnh if ... else
Cú pháp: -
Nếu biểu hiện? sau đó là body_1 còn lại là body_2
Nếu biểu thức được đánh giá là đúng thì nó sẽ trả về body_1 nếu không nó sẽ trả về body_2
Bán tại:--
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
Câu lệnh if..else lồng nhau
Nó có nghĩa là một câu lệnh if hoặc else..if có thể được đặt bên trong một câu lệnh if hoặc else..if khác.
Cú pháp: -
If {expression_1} { Body_1 If {expression_2} { Body_2 } }
Bán tại:--
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
Chuyển đổi câu lệnh
Câu lệnh switch cho phép kiểm tra sự bằng nhau của một biến so với danh sách các giá trị. Nó đánh giá danh sách các giá trị và trả về kết quả của đánh giá đó. Nếu không có giá trị nào khớp thì giá trị mặc định sẽ được trả về.
Ví dụ:
#!/usr/bin/tclsh # switch_cmd.tcl set domain x switch $domain { x { puts "x" } y { puts "y" } z { puts "z" } default { puts "unknown" } }
Công tắc lồng nhau
Câu lệnh switch lồng nhau có nghĩa là câu lệnh switch bên trong câu lệnh switch.
cú pháp :-
switch <switchingstring1> { <matchstring1> { body1 switch <switchingstring2> { <matchstring2> { body2 } ... switch <switchingstringN> { <matchStringN> { bodyN } } }
Ví dụ: Trong ví dụ sau, giá trị của a là 100 và với cùng đoạn mã trên, chúng ta chuyển câu lệnh sang giá trị khác của b là 200. Lệnh out sẽ hiển thị giá trị cho cả a và 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" } } } }
Đầu ra: -
Giá trị của a là 100
Giá trị của b là 200
Câu lệnh vòng lặp TCL
Câu lệnh lặp cho phép thực hiện một câu lệnh hoặc nhóm câu lệnh nhiều lần. Tcl cung cấp các loại câu lệnh lặp sau.
Lệnh trong khi
Khi một điều kiện nhất định là đúng thì một câu lệnh hoặc một nhóm câu lệnh sẽ lặp lại trong thân vòng lặp.
cú pháp:
While {condition} { Statements }
Bán tại :-
#!/usr/bin/tclsh Set a 10 While {$a < 12} { Puts "a is $a" incr a }
Đầu ra: -
a là 10
a là 11
Trong ví dụ trên, lệnh tích hợp "incr" được sử dụng. Điều đó có nghĩa là giá trị của 'a' sẽ tăng thêm 1 cho đến giá trị tối đa (<12).
Đối với lệnh
Nó thực thi một chuỗi các câu lệnh nhiều lần dựa trên một giá trị bộ đếm. Nó được tự động tăng hoặc giảm trong mỗi lần lặp lại vòng lặp.
cú pháp :-
For {start} {test} {next} { Body }
Ví dụ: Trong ví dụ bên dưới, giá trị 'i' được đặt thành 0 và tăng dần cho đến khi giá trị <5.
#!/usr/bin/tclsh for {set i 0} {$i < 5} {incr i} { put $i }
Đầu ra: -
0 1 2 3 4
Tóm tắt:
- TCL là ngôn ngữ kịch bản dựa trên chuỗi và cũng là ngôn ngữ thủ tục
- Ngôn ngữ này thường được sử dụng cho GUI và thử nghiệm
- Trong TCL theo mặc định mọi thứ đều là chuỗi
- TCL là ứng dụng shell đọc lệnh TCL từ đầu vào tiêu chuẩn của nó hoặc từ một tệp và đưa ra kết quả mong muốn.
- Chương trình TCL nên có phần mở rộng .tcl