Language
コメント†
- "#" 以降がコメントになる
- 式を書いた後にコメントを書く場合、 "#" の前に ";" がないとエラーになるので注意
I/O†
- 定義済みの channel_ID: stdout / stderr / stdin
- 出力
- puts [-nonewline] channel_ID string
- 入力
1sec 未満の sleep†
グローバル変数†
他のスクリプトファイルから関数や変数を取り込む†
- あるスクリプト(script-main.expとする)から、別のスクリプトファイル(script-sub.expとする)の中身を取り込みたいときは、以下のように記述する:
source "script-sub.exp";
- これにより、script-sub.exp の定義内容が、元からscript-main.expに書かれていたかのように扱える。
フロー制御†
set i 10;
set EXP 20;
if { ${i} > ${EXP} {
処理...
} elseif { ${i} == ${EXP} } {
処理...
} else {
処理...
}
for†
set LOOP_MAX 100;
for { set i } { ${i} < ${LOOP_MAX} } { incr i } {
処理...
}
foreach†
while†
while { ${i} >= ${VAL} } {
処理...
}
ループ制御の補助コマンド†
command | description |
continue | ループをスキップ。 |
break | ループを終了 |
exit [ return_code ] | return_code は、default では0 |
switch†
switch [options] ${string} {
pattern_1 {
処理...
}
pattern_2 {
処理...
}
...
default {
処理...
}
}
- options
option | description |
-exact | string と pattern が完全に一致する場合に真となる |
-glob | string をグロブパターン pattern とマッチング |
-regexp | string を正規表現 pattern とマッチング |
-- | option 終了を示す |
- option 無しの場合、値 1 と 値 01 は、別物として識別される。
- 現在時間の取得
set time_stamp [ clock seconds ]; # clock clicks -milliseconds ではダメ。
- 上記で取得した時間の値 time_stamp を書式化して、time に格納する。
set time [ clock format ${time_stamp} -format "%s" ];
set time [ clock format ${ts} -format {%Y-%m-%d %H:%M:%S} ]; # YYYY-MM-DD hh:mm:ss
- より詳しくは、Lang/Tcl_Tk_Expect/time へ。
経過時間の計測†
expect†
timeout†
微妙な待ち方をしたいときの例†
set timeout 1;
while {1} { # 基本的には無限待ち
expect "KEYWORD" {
処理;
break; # この処理が終わったら、whileループを抜ける
}
if { 条件 } {
break; # 場合によっては無限待ちループを抜ける
}
}
expect†
複数のキーワードを受け付け、キーワードによって挙動を変えたい場合†
expect {
"KEYWORD1" { 処理1; }
"KEYWORD2" { 処理2; }
}
- エラー発生時にはエラーメッセージを出力して再度正常時と同様にプロンプトを表示するようなプログラムが相手の場合、プロンプト文字列(正常時処理用に待つキーワード)は一番最後に列挙する。
シグナルを受け取った時の処理†
log の取得†
参考リンク†