- 제어구조
- if then else 구문
set x 0
if { $x == 0 } {
puts "Zero Value"
} else {
puts "Nonzero Value"
}
set x 0
if { $x == 0 } \
{
puts "Zero Value"
} \
else \
{
puts "Nonzero Value"
}
// \를 이용해 if body가 여러 줄에 걸쳐 있음을 알려줌
set x 2 ; set y 6
if { $x != 0 && [expr $y / $x ] <4 } \
{
puts "good"
} \
else \
{
puts "bad"
}
result : good
// &&, || 의 경우 왼쪽의 수식 연산이 우선 실행 되므로 왼쪽이 거짓일 경우 오른쪽은 실행하지 않음
|| 의 경우 보다 간단한 연산을 왼쪽에 두고 실행하는 것이 좋다.
- switch 구문
ex)
set apple_price 100
switch #option# apple #value(바뀔 수 있는 값)# {
apple { puts $apple_price }
banana { puts $banana_price }
default { puts "nothing" }
}
option :
-exact : value의 값은 정확히 패턴과 일치해야함. 따로 지정하지 않으면 이 옵션은 지정되어 있는 것으로 간주
-glob : glob style 패턴 매칭을 사용
//////////////////////////////////////////////////////////////////////////////////////////////
glob? = string match 명령어에서 사용되는 패턴 UNIX shell에서 사용하는 wildcard 문자들을 사용하여
기술한 패턴을 말한다.
ex) wlid card
* : 아무 글자에나 매칭이 되고 0개 이상의 글자에 매칭
? : 아무 글자나 한 글자에만 매칭
[]: [ ] 사이에 열거된문자에만 매칭, 한 글자만 적용
/////////////////////////////////////////////////////////////////////////////////////////////
-regexp : 정규 표현식을 이용한 패턴 매칭
-- : 옵션의 끝을 나타냄 value값이 --로 시작하는 경우 옵션으로 오인하지 않기 위해 필요
- while 구문
ex)
set i 0
while { $i < 10 } {
incr i
puts $i
}
while { 1 } {
puts "this is infinite loop
}
// 1은 참, 0은 거짓이므로 위의 문장이 무한하게 출력됨
- for 구문
ex) i가 10보다 작으면 1씩 증가시키고 10이 되면 종료
for { set i 0 } { $i < 10 } { incr k 1 } {
puts $i
}
- foreach 구문
//valuelist가 가지고 있는 모든 리스트 원소들을 하나씩 차례로 loop에 할당하면서 body를 수행//
set var [ list 1 2 3 4 ]
foreach element $var {
puts $element
}
//valuelist 쌍이 여러 개 올 수 있다//
foreach e1 { one two three } e2 { 1 2 3 } {
puts "$e1 $e2"
}
result :
one 1
two 2
three 3
// complicated model //
foreach name { apple orange } { price1 pirce2 } { one 100 two 200 } {
puts "$name = $price1 : $price2"
}
- break, continue 구문
ex) j가 2보다 커지면 break되서 루프를 나오고 i루프를 실행하고 다시 j루프에서 2보다 커지면 break
for { set i 0 } { $i < 3 } { incr i 1 } {
puts "i = $i"
for { set j 0 } { $j < 5 } { incr j 1 } {
if { $j > 2 } {
break
}
puts "j = $j"
}
}
result :
i = 1
j = 1
j = 2
i = 2
j = 1
j = 2
ex) continue 이하 명령어를 실행하지 않고 새로운 loop를 시작한다.
i가 3이 됬을 때 continue에 의해 바로 for loop가 진행되어 i = 4로 진행됨
for { set i 1 } { $i < 5 } { incr k } {
if { $i == 3 } {
continue
}
set ans [ expr 8 / $i ]
puts $ans
}
result :
8
4
2
- return 구문
함수를 종료하고 함수를 호출한 바로 다음 줄로 복귀
for { set i 0 } { $i < 10 } { incr k } {
if { $i > 5 } {
return
}
puts $i
}
result :
0
1
2
3
4
5
- catch 구문 ??
- error 구문 ??
연습문제 1.
// 구구단을 출력하는 프로그램을 작성 하시오.
gets stdin Number1
gets stdin Number2
puts "${Number1} * ${Number2} = [ expr ${Number1} * ${Number2} ]"
// 1~60 의 임의의 숫자를 고르는 게임을 작성
고른 숫자가 크면 크다는 / 작으면 작다는 메세지 출력
맞췄을 경우 축하와 점수 출력 [ 점수는 반복 횟수가 적을수록 높게 ]
임의의 숫자 >> UNIX commend : date | cut -c25-26
set random [ exec date | cut -c25-25 ]
set score 100
gets stdin number
for { set i 0 } { $i < 60 } { incr i } {
if { $number == $random } {
puts "Congratulation"
puts "score : $score"
} elseif { $number > $random } {
puts "Number Down"
set score [ expr $score -1 ]
} elseif { $number < $random } {
puts "Number Up"
set score [ expr $score -1 ]
}
gets stdin number
}
'Linux > tcl' 카테고리의 다른 글
[tcl] (0) | 2022.08.02 |
---|---|
[Tcl] tcl 정규표현식 (0) | 2022.06.10 |
[Tcl] tcl 리스트 / 배열 (0) | 2022.05.25 |
[Tcl] tcl 문자열 조작 (0) | 2022.05.18 |
[Tcl] tcl 기본문법 (0) | 2022.05.17 |