ページのトップに戻る
Systemwalker Operation Manager  リファレンスマニュアル

16.1.3 Systemwalkerスクリプトの文法

Systemwalkerスクリプトの文法について説明します。

変数

変数名は、アルファベットで始まる任意の長さの英数字が使用できます。大文字と小文字は区別され、また“_”(アンダーバー)を含むことができます。

構文

Systemwalkerスクリプト言語の構文とその解釈は以下のように定義されています。

コマンドの区切り

スクリプト行は、“;”(セミコロン)または改行がコマンドの区切りとなります。

例:変数abc,defにそれぞれ値を格納する場合

set abc ABC
set def DEF

または

set abc ABC ; set def DEF

“$”(ダラー記号)による変数置換

変数置換は、“$”(ダラー記号)を使用します。変数置換とは、変数に格納した値の参照をすることです。値が未設定の変数に対して変数置換を行うとスクリプトエラーとなり、異常終了します。

例:変数abcに格納した値を別の変数defに格納する場合

set abc ABC
set def $abc

“[ ]”(大括弧)によるコマンド置換

スクリプトのコマンドには、復帰値を返すものがあります。コマンド置換とは、呼出し元におけるコマンド呼出しを行った場合の復帰値の参照に当たります。コマンド置換は、“[ ]”(大括弧)を使用します。

例:算術演算(3+2)の結果を変数abcに格納する場合

set abc [ expr 3 + 2 ]

コマンド内のワードの区切り

コマンド内のワードの区切りは、スペースまたはタブを使用します。ワードの区切りとは、「コマンド名、第1引数、第2引数…」の区切りのことを指します。

ワード内の変数置換・コマンド置換

ワード内に“$”(ダラー記号)が含まれる場合、変数置換が行われ変数の内容に置き換えられます。ワード内に“[]”(大括弧)が含まれる場合は、コマンド置換が行われ、コマンド実行結果の復帰値に置き換えられます。

コマンド置換は、再帰的に行われますが、変数置換は一度しか行われません。

例:再帰的にコマンド置換を行い、計算結果を格納する場合

set abc [ expr [expr 1 + 1] + 2 ]

注意:

exprコマンドは、入れ子の計算式も解釈可能なため、算術演算だけの場合は通常は、例で示したような書き方はせず、以下の記述をします。

set abc [ expr (1 + 1) + 2 ]

」(ダブルクォーテーション)によるワードの指定

ワードの最初の文字が「”」(ダブルクォーテーション)の場合は、次のダブルクォーテーションまでが1つのワードとして扱われます。ワードの最初の文字がダブルクォーテーションでそれに対応する終了ダブルクォーテーションがない場合は、文法エラーとなります。また、開始と終了のダブルクォーテーション自体はワードの内容としては解釈されません。

例:文字列123を変数abcに格納する場合

set abc ”123”

ダブルクォーテーションは、直前に“¥”(円記号)がある場合、ワード囲み記号として解釈されず、通常の文字として扱われます。円記号置換については、““¥”(円記号)によるエスケープシーケンス(円記号置換)”を参照してください。

例:文字列123”を変数abcへ格納する場合

set abc ”123¥””

ワード指定のダブルクォーテーションの中に含まれる“;”(セミコロン)、“]”(閉じ括弧)、スペース(改行も含む)は、普通の文字として扱われますが、コマンド置換・変数置換は処理されます。

例:空白・変数置換を含む文字列を格納する場合

set abc ”123”
set str ”abc $abc def”

この場合、変数strへ格納される文字列は abc 123 def となります。

“{ }”(中括弧)によるワード指定

ワードの最初の文字が“{”(開き中括弧)の場合は、対応する“}”(閉じ中括弧)までがワードになります。ワードの最初の文字が開き中括弧でそれに対応する閉じ中括弧がない場合は、文法エラーとなります。また、開始と終了の中括弧自体はワードの内容としては解釈されません。

例:文字列1{2}3を変数abcへ格納する場合

set abc {1{2}3}

中括弧は、直前に“¥”(円記号)がある場合、ワード囲み記号として解釈されません。ただし、中括弧によるワード囲み内では、“¥{”,“¥}”を通常文字の“{”,“}”に置き換えることはありません。詳細については、“ワード囲み記号と円記号置換”を参照してください。

例:中括弧を含む文字列を格納する場合

set abc {123¥}}

この場合、変数abcへは文字列 123¥}が格納されます。

ワード指定の中括弧囲みの中に含まれる“;”(セミコロン)、“]”(閉じ括弧)、スペース(改行も含む)は、普通の文字として扱われ、コマンド置換・変数置換は処理されません。

例:空白を含む文字列を格納する場合

set abc ”123”
set str {abc $abc def}

この場合、変数strへ格納される文字列は abc $abc def となります。

“¥”(円記号)によるエスケープシーケンス(円記号置換)

ワードに“¥”(円記号)が含まれている場合は、その直後の文字との組み合わせをエスケープシーケンスとして解釈され、円記号置換が行われます。

円記号置換の種類を以下に示します。

シーケンス

置換内容

¥a

ベル

¥b

バックスペース

¥f

改頁

¥n

改行

¥r

キャリッジ・リターン

¥t

タブ

¥v

垂直タブ

¥<改行>

空白文字(継続行)

¥”

ワード囲み記号として解釈されない単独ダブルクォーテーション

¥{

ワード囲み記号として解釈されない単独中括弧開き記号

¥}

ワード囲み記号として解釈されない単独中括弧閉じ記号

¥¥

単独円記号“¥”

注意:円記号の直後に上記以外の文字を指定することはできません。

ワード囲み記号と円記号置換

ダブルクォーテーションで囲まれたワードに対しては、すべての円記号置換が行われますが、中括弧で囲まれたワードに対しては“¥<改行>”を除き、円記号置換は行われません。

例:中括弧内で円記号置換されない例

set abc ”C:¥¥tmp”
set def {C:¥tmp}

この場合、変数abc,defともに文字列 C:¥tmp が格納されます。

例:中括弧内でも円記号置換される例

set abc ”123¥
456”
set def {123¥
456}

この場合、変数abc,defともに文字列 123 456 が格納されます。

中括弧によるワード囲み内では、“¥{”,“¥}”は円記号置換されません。また、“¥¥”も円記号置換されませんが、後の¥は“¥<改行>”、“¥{”、“¥}”でのエスケープ文字としての意味を失います。

例:“¥”がエスケープ文字としての意味を失う場合の例

set abc {123¥¥}

この場合、変数abcには文字列 123¥¥ が格納されます。

注意

これまでの説明から、以下の文字列を中括弧で囲んだワードとして記述することはできません。

例:末尾に円記号がある文字列

C:¥tmp¥

例:対応のとれていない中括弧が存在する文字列

123}

例:改行の直前に円記号がある文字列

C:¥tmp¥
D:¥tmp¥

条件式における文字列の扱い

ifやwhileなどの判定文で指定する条件式は、通常は数値式として解釈されます。このため、条件式を文字列式として解釈させたい場合は文字列を「”」(ダブルクォーテーション)で囲む必要があります。真偽値の意味を持つ特別な文字列(yes,no,true,false)を指定する場合においても同様です。

例1:変数aの内容が文字列xyzであるかどうか判定する場合

if {$a == ”xyz”} {
      puts ok
}

例2:真である間処理を繰り返す場合

set i 0
while {”true”} {
      incr i
      if {$i > 5} {
            break
      }
}

文字列操作コマンド

文字列をダブルクォーテーションで囲んでも、文字列全体が数値として解釈可能な場合は、数値式として判定されます。厳密な文字列比較を行うためには、文字列操作用の16.2.19 string(文字列を操作する)コマンドを使用して判定を行うことを推奨します。

例:変数aの内容が文字列 01 であるかどうか判定する場合

if {[string compare $a 01] == 0} {
      puts ok
}

上記で、判定文を以下のようにすると、変数aの内容が1や001の場合も真となります。

if {$a == ”01”}

コメント行

#で始まる行およびコマンドの最初が#の場合は、改行までをコメントと解釈します。

例:

# 変数を初期化する
set abc 0

注意

コメントを記述する場合、以下の点に注意してください。

  • コメント行内には、“{”(開き中括弧)、“}”(閉じ中括弧)を使用しないでください。

  • コメント行、およびコメント行の直前の行で、継続行(¥<改行>)は使用しないでください。

  • ifやwhileなどの判定文で指定する条件式内には、コメントを記述しないでください。