TCL TK 튜토리얼: 도구 명령 언어
TCL이란 무엇입니까?
TCL은 표준 입력이나 파일에서 TCL 명령을 읽고 원하는 결과를 제공하는 쉘 애플리케이션입니다.
TCL은 문자열 기반 스크립팅 언어이자 절차적 언어입니다. 1989년 John Osterhout에 의해 처음 만들어졌습니다. 이 언어를 개발하는 목적은 애플리케이션에 쉽게 내장되는 것입니다. 이 언어는 일반적으로 GUI 및 테스트에 사용됩니다. 예를 들어, 신속한 프로토타이핑, 지원 데이터베이스 상호 작용 등. TCL에서는 기본적으로 모든 것이 문자열입니다.
이 튜토리얼에서 배울 내용은 다음과 같습니다.
TCL을 실행하는 방법
TCL 코드를 실행하는 방법에는 두 가지가 있습니다.
- Windows 기반 응용 프로그램은 여기에서 사용할 수 있습니다. tcltutor 실행 파일
- 리눅스 기반 애플리케이션
In Linux 대화형 인터프리터를 사용하면 아래와 같이 TCL 스크립트를 실행할 수 있습니다.
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에는 세 가지 종류의 대체가 있습니다.
- 명령 대체
- 변수 대체
- 백슬래시 대체
하나씩 공부해보자
명령 대체
대괄호는 명령 대체에 사용됩니다.
예:-
% 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 쉘 명령에서 무시됩니다.
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에서 변수를 생성하려면 다음을 사용해야 합니다. "세트" 명령
10으로 설정
변수의 값을 얻으려면 다음과 같이 "$" 기호를 사용해야 합니다.
% $a를 넣어
% 10
따라서 변수 'a'의 값은 10이 됩니다.
TCL 명령 정보가 존재합니다.
"set" 명령은 위에 표시된 대로 변수를 만들고 읽는 데 사용됩니다. unset 명령은 변수를 파괴하는 데 사용됩니다. "info exists" 명령은 varName이 현재 컨텍스트에서 변수(또는 배열 요소)로 존재하는 경우 1을 반환하고, 그렇지 않으면 0을 반환합니다. (아래 예 참조).
TCL에는 "info presents", "info function", "info global" 등과 같은 다양한 "info" 명령이 있습니다. 여기서는 "정보가 존재합니다"의 예를 살펴보겠습니다.
전:-
% set a 20 % puts $a % 20 % puts [info exists a] % 1 % unset a %puts [info exists a] % 0
다양한 교정기와 그 동작
{} -> 중괄호
TCL 그룹 단어의 중괄호는 인수가 됩니다. 중괄호는 지연되는 블록을 정의하는 데 사용됩니다. 즉, 현재 줄의 나머지 명령 다음에 실행될 수 있습니다. 중괄호 안의 문자는 작성된 그대로 명령에 전달됩니다.
기억해야 할 몇 가지 사항
- {} 중괄호 내에서는 변수 대체가 허용되지 않습니다.
- 목록 데이터 유형을 만드는 데 사용되었습니다.
예:-
% set x 10 % puts {$x} % $x
%set number {1 2 3 4 5} -> 여기서 숫자는 목록 데이터 유형입니다.
%$number를 넣습니다.
% 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
배열 a의 "N번째" 값을 인쇄하려면 Puts $a(N)을 사용합니다.
TCL 명령줄 인수
명령줄에서 스크립트로 전달된 데이터 항목을 인수라고 합니다. Tcl 스크립트에 대한 명령줄 인수의 수는 전역 변수로 전달됩니다. 인수 . 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바위 산
표현식은 피연산자와 연산자로 구성됩니다. "expr" 명령으로 평가됩니다. Operators는 우선순위와 연관성에 따라 평가됩니다. TCL 언어에는 아래와 같은 내장 연산자가 있습니다.
Opera토르 카테고리 | 상징 | 우선순위/연관성 |
---|---|---|
산수 Opera바위 산 | + - * / % | 왼쪽에서 오른쪽으로 |
관계형 Opera바위 산 | == != < > <= >= | 왼쪽에서 오른쪽으로 |
논리 Opera바위 산 | && || ! | 왼쪽에서 오른쪽으로 |
비트 단위 Opera바위 산 | & | ^ ~ | 왼쪽에서 오른쪽으로 |
세 개 한 벌 Opera바위 산 | ?: | 오른쪽에서 왼쪽으로 |
Shift Opera바위 산 | << >> | 왼쪽에서 오른쪽으로 |
문자열 비교 Opera바위 산 | eq ne | 왼쪽에서 오른쪽으로 |
지수 계산 Opera바위 산 | ** | 왼쪽에서 오른쪽으로 |
명부 Opera바위 산 | 니에서는 | 왼쪽에서 오른쪽으로 |
산수 Opera바위 산
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
관계형 Opera바위 산
왼쪽 피연산자의 값이 오른쪽 피연산자의 값보다 큰지 확인합니다. 그렇다면 조건이 참이 되어 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
논리 Opera바위 산
&& 두 피연산자가 모두 1이 아니면 조건이 참이 되고 0을 반환합니다. 그렇지 않으면 XNUMX을 반환합니다.
%set a 20 %set b 10 %puts [expr $a && $b] 1
|| 두 피연산자 중 하나가 1이 아니면 조건이 참이 되고 0을 반환하고 그렇지 않으면 XNUMX을 반환합니다.
%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
비트 단위 Opera바위 산
& (비트 단위 and)는 비트 단위 연산을 수행하며 연산 내용은 아래 표를 따릅니다.
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 | 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
Condition-exp가 true이면 exp1이 평가되고 결과가 반환됩니다. cond-exp가 false이면 exp2가 평가되고 그 결과가 반환됩니다. 이 예에서 A의 값이 1보다 크므로 exp6은 참입니다.
%set A 7 %set result [expr $A > 6 ? true : false] %puts $result true
Shift Opera바위 산
Shift 연산자는 << 왼쪽 시프트 연산자 또는 >> 오른쪽 시프트 연산자로 표시됩니다. << 왼쪽 시프트 연산자의 경우 왼쪽 피연산자 값은 오른쪽 피연산자가 지정한 비트 수만큼 왼쪽으로 이동합니다.
%set A 7 %set result [expr $A << 2] %puts $result
>> 오른쪽 이동 연산자의 경우 왼쪽 피연산자 값은 오른쪽 피연산자로 지정된 비트 수만큼 오른쪽으로 이동됩니다.
%set A 7 %set result [expr $A >> 2] %puts $result
문자열 비교 Opera바위 산
문자열 비교 연산자는 두 피연산자의 값을 비교합니다. 피연산자의 값이 같으면 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
명부 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 문은 부울 식과 그 뒤에 오는 하나 이상의 문으로 구성됩니다.
If ...문
통사론:-
만약 expr이라면?그럼? 몸
expr이 true로 평가되면 명령 본문이 실행됩니다.
전:-
set age 10 if {$age < 20} { puts "Age is less than 20" } Output: Age is less than 20
If ... else 문
구문 :-
표현이라면? 그런 다음 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 문
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 <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은 다음과 같은 유형의 루핑 문을 제공합니다.
동안 명령
주어진 조건이 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 확장자가 있어야 합니다.