MaxL Shell構文ルールと変数
MaxL Shellでは、MaxL文の最後にセミコロンの終端文字が必要です。MaxLスクリプトで変数を操作して柔軟性を高めることができます。MaxL Shellの引用符と特殊文字の規則を学習して、EssbaseのMaxLスクリプトが期待どおりに機能するようにします。
MaxL Shellは、MaxL文を入力するための事前解析メカニズムです。次の構文情報は、MaxL Shellを正常に使用するために役立ちます。
セミコロン
MaxL文がEssbaseサーバーに対話形式で、またはMaxL Shellを介したバッチ・モードで渡される場合、セミコロンを使用して終了する必要があります。セミコロンは、いつ文を終了するかをessmshに伝えるためにのみ使用され、MaxL言語自体には含まれません。そのため、MaxL文をプログラム的に発行するときは、セミコロンを使用しないようにします。
表3-21 MaxLでのセミコロンの使用例
プログラム | 例 |
---|---|
対話型MaxL Shell | create application Sample; |
MaxL Shellスクリプト: |
|
変数
MaxL Shellの変数の概要
MaxL Shellでは、コンピュータ名、ユーザー名、パスワードなどの、変更予定のデータまたは頻繁に参照されるデータのプレースホルダとして変数を使用できます。変数は、MaxLスクリプト内でも、シェルを対話型で使用している間にも使用できます。MaxLスクリプト内で変数を使用すると、ユーザー、データベースまたはホストごとにカスタマイズ済スクリプトを多く作成する必要がなくなります。
環境変数(例: Essbaseがインストールされているディレクトリを参照する$ESSBASEPATH
)、位置パラメータ(例: $1
、$2
など)またはローカルに定義されたシェル変数が変数になります。
変数はすべて$
(ドル記号)で始まる必要があります。ローカルに定義されたシェル変数はドル記号なしで設定する必要がありますが、参照時にはドル記号が必要です。例:
set A = val_1;
echo $A;
val_1
ノート:
変数はカッコで囲めます。例: $1 = arg1
の場合、$(1)23 = arg123
になります。
変数が認識および展開され、文字列が単一のトークンとして解釈されるようにするには、文字列を二重引用符で囲みます。たとえば、$ESSBASEPATHは/scratch/user/oracle_home/essbase/products/Essbase/EssbaseServer
として解釈されることがあります。
変数を展開せずに文字列が単一のトークンとしてessmshで認識されるようにするには、文字列を一重引用符で囲みます。たとえば、'$ESSBASEPATH'
は$ESSBASEPATH
と解釈され、/scratch/user/oracle_home/essbase/products/Essbase/EssbaseServer
とは解釈されません。
環境変数
MaxL Shellですべての環境変数を参照できます。
例(Unix): spool on to "$ESSBASEPATH\\out.txt";
結果: MaxL Shellセッションは、/scratch/user/oracle_home/essbase/products/Essbase/EssbaseServer/out.txt
に記録されます。
位置パラメータ
位置パラメータ変数は、引数としての呼び出し時にシェルに渡されて、一般に、後続のスクリプトまたは対話型のMaxL Shellセッションで$nを使用して参照できます。このnは、引数がコマンド・ラインで渡された順番を表す数値です。
たとえば、次のMaxL Shell呼び出しがあります。
essmsh filename Fiona sunflower
そのセッションの後続のログイン文は次のようになります。
login $1 identified by $2 on $COMPUTERNAME;
-
$COMPUTERNAME
はWindowsの環境変数です。 -
$1
および$2
は、呼び出し時に引数として渡されるユーザー名とパスワードを参照します。
位置パラメータの値は、セッション内で変わる場合があります。たとえば、$1
の値が最初はFiona
(essmshが最初の引数としてFiona
を使用して呼び出されたため)だった場合、構文set 1 = arg_new;
を使用して変更できます。
ノート:
MaxL Shellスクリプトまたは対話型セッションをネストする場合、ネストされたシェルでは、親シェルの位置パラメータは認識されません。位置パラメータを使用する場合は、ネストされたシェルを個別の引数に渡す必要があります。
MaxL Shellで読み取られるファイルまたはプロセスは、位置パラメータ$0を使用して参照できます。例:
1) Invocation: essmsh filename
$0 = filename
2) Invocation: program.sh | essmsh -i
$0 = stdin
3) Invocation: essmsh
$0 = null
ローカルに定義されたシェル変数
引数や位置パラメータを使用せずに、MaxL Shellで任意の名前の変数を作成できます。これらの変数は、ネストされた任意のシェル・セッションを含めて、シェル・セッションの期間維持されます。
例:
MaxL>login user1 identified by password1;
MaxL>set var1 = sample;
MaxL>echo $var1; /* see what the value of $var1 is */
sample
MaxL>display application $var1; /* MaxL displays application "sample" */
ローカルに定義された変数は、アルファベット文字、数字およびアンダースコア(_)を使用して名前を設定できます。変数の値には任意の文字を使用できますが、MaxL Shellに適用される通常の引用符と構文のルールに注意してください。
ネストされたスクリプトで定義または変更された変数は、ネストされたスクリプトの実行後に親スクリプト内に保持されます。
引用符と変数の展開
次の例では、引数を指定してMaxL Shellに対話型でログインしていると仮定します。これらの例の他に、引用符と特殊文字のルールを参照してください。
essmsh -a Fiona sunflower sample basic login $1 $2;
表3-22 MaxLでの引用符の使用方法と変数への効果
例 | 戻り値 | 説明 |
---|---|---|
echo $1; | Fiona |
$1が最初の呼び出し引数として展開されます。 |
echo "$1's hat"; | Fiona's hat |
$1が最初の呼び出し引数として展開されて、二重引用符が使用されているため特殊文字「'」が許可されます。 |
echo $3; | sample |
$3が3つ目の呼び出し引数として展開されます。 |
echo '$3'; | $3 |
$3はリテラルに取得されて展開されません。これは、一重引用符で保護されているためです。 |
display database $3.$4; | データベースsample.basic が表示されます。
|
$3および$4が3つ目と4つ目の呼び出し引数として展開されます。$3.$4 は2つのトークンとして解釈され、これによりDBS-NAMEに適した状態になります。
|
echo "$3.$4"; | sample.basic 。ただし、1つのトークンとして解釈されます(DBS-NAMEには適しておらず、これには2つのトークンが必要です)。
|
$3と$4が3つ目と4つ目の呼び出し引数として展開されますが、二重引用符があるため、文字列全体が単一のトークンとして解釈されます。 |
終了状態の変数
正しいMaxL Shell操作では、終了状態がゼロになります。ほとんどの失敗したMaxL Shell操作は、通常、終了状態の番号が1になります。終了状態は、通常、シェル内から$?
を使用して参照できます。次に例を示します。
MAXL> create application test1;
OK/INFO - 1051061 - Application test1 loaded - connection established.
OK/INFO - 1054027 - Application [test1] started with process id [234].
OK/INFO - 1056010 - Application test1 created.
MAXL> echo $?;
0
MAXL> drop application no_such;
ERROR - 1051030 - Application no_such does not exist.
MAXL> echo $?;
2
引用符と特殊文字のルール
これらのルールはMaxL Shellコマンド用です。適用可能なコマンドには、spool on/off、echo、nestingなどがあります。
一重引用符で囲まれたトークン
一重引用符で囲まれたコンテンツは、変数の展開はされずにリテラルとして保持されます。
例: echo '$3';
結果: $3
二重引用符で囲まれたトークン
二重引用符のコンテンツは単一トークンとして扱われ、変数が展開される場合を除いて、コンテンツはリテラルとして認識されます。
例: spool on to "$ESSBASEPATH\\out.txt";
結果: MaxL Shellセッションは、/scratch/user/oracle_home/essbase/products/Essbase/EssbaseServer/out.txt
に記録されます。
例: spool on to "Ten o'clock.txt"
結果: MaxL ShellセッションがTen o'clock.txt
という名前のファイルに記録されます
アポストロフィ(一重引用符)の使用
二重引用符で囲まれた場合は保持されます。それ以外の場合は、構文エラーになります。
例: spool on to "Ten o'clock.txt"
結果: MaxL ShellセッションがTen o'clock.txt
という名前のファイルに記録されます
バックスラッシュの使用
バックスラッシュは特殊文字のため、一重または二重引用符で囲む必要があります。
1つのバックスラッシュは、シェルでは1つのバックスラッシュとして扱われ、MaxLでは無視されるか特殊文字として扱われます。2つのバックスラッシュは、シェルとMaxLによって1つのバックスラッシュとして扱われます。
-
'\ ' = \
(MaxL Shell) -
'\ ' = (nothing)
(MaxL) -
'\\' = \\
(MaxL Shell) -
'\\' = \
(MaxL)
例: spool on to 'D:\output.txt'
結果: MaxL Shellでは、出力がD:\output.txt
に記録されます。
例: spool on to 'D:\\output.txt'
結果: MaxL Shellでは、出力がD:\output.txt
に記録されます。
例: import database sample.basic lro from directory "$APPDIR\app\sample-basic-lros";
結果: エラー。importはMaxL文で、MaxLでは、'\'
は無視されます。
例: import database sample.basic lro from directory "$APPDIR\\app\\sample-basic-lros";
結果: MaxLは、$APPDIR\app\sample-basic-lros
からSample.BasicにLRO情報をインポートします(APPDIR変数が定義されている場合)。