JP1/Advanced Shell
変数とはジョブ定義スクリプト内で値を代入する領域のことです。変数の作成および変数の値を参照できます。また,変数は,エクスポートによって子プロセスに環境変数として引き継がせることができます。変数のことをシェル変数ともいいます。
- <この項の構成>
- (1) 変数の作成
- (2) 変数の値の参照
- (3) 変数に設定できる書式,属性
作成する変数の名称は,命名規則の範囲で任意に指定できます。また,英字は大文字と小文字を区別するため,同じスペルであっても異なる変数名になります。ただし,Windows環境で小文字が含まれる変数をエクスポートしようとするとエラーとなるため,英大文字を使用することを推奨します。変数の命名規則を次に示します。
- 使用できる文字は英数字と_(アンダースコア)だけです。
- 先頭文字は数字以外にしてください。
- 変数名の長さは無制限です。ただし,入力行の上限およびCUIデバッガのコマンド入力文字数の上限が存在します。そのため,ジョブ定義スクリプト内で使用する変数の長さは上限以下であることを推奨します。
入力行の上限については,「5.1.11 入力行の上限」を参照してください。CUIデバッガのコマンド入力文字数の上限については,「6.1.3 デバッガのコマンド一覧【UNIX限定】」を参照してください。
変数を作成する場合の書式を次に示します。
変数名=値変数は=の左項に変数名を記述することで作成されます。作成された変数には,値の書き込みおよび値の読み込みができます。変数の属性を読み込み専用に変更する場合は,シェル標準コマンドのreadonlyコマンドを使用します。readonlyコマンドについては,「9.3 シェル標準コマンド」の「readonlyコマンド(変数の属性を読み込み専用に変更する,または読み込み専用の変数を表示する)」を参照してください。
作成と同時に値を代入する場合は,=の右項に値を記述します。変数に代入する値は何文字でも指定できます。しかし,変数に代入した数値を使用して算術演算する場合は,変数の値および算術結果がsigned long型の範囲内でなければなりません。範囲を超えると桁あふれが発生し,正しい結果を求めることができません。
=の両脇にはスペースを入力しないでください。スペースが入っていた場合,変数は作成されません。変数にスペースやメタキャラクタを含む文字列を代入する場合は,クォーテーション(’および”)で囲んでメタキャラクタを無効化にする,またはエスケープ文字を使用してください。メタキャラクタおよびメタキャラクタの無効化については,「5.1.5 メタキャラクタ」を参照してください。
変数の値を参照する場合の書式を次に示します。
$変数名 または ${変数名}変数に代入された値は,変数名に$を付けることで参照できます。参照する変数は変数名と完全に一致した変数が対象となります。ただし,変数名に使用できない文字を指定した場合,それまでの文字を変数名と認識し処理をします。
- 参照する変数名の文字列に,変数名には指定できない文字を指定した場合の実行例
abc=xxx echo $abc@zzz →"xxx@zzz"が標準出力に出力されます。また,参照する変数名を明示的に指定したい場合は,変数名を{ }で囲むことで参照できます。ただし,{ }で囲った場合は,変数名に使用できない文字が含まれていても変数名の一部として扱い処理をします。
- 変数abcを明示的に指定し,参照する場合の実行例
abc=xxx abcdef=yyy echo ${abc}def →"xxxdef"が標準出力に出力されます。
(3) 変数に設定できる書式,属性
JP1/Advanced Shellでは変数に対して書式および属性を設定できます。設定できる書式と属性を次の表に示します。
表5-1 変数に対して設定できる書式
書式 意味 左詰め 変数に代入されている値を左詰めに変換します。 右詰め 変数に代入されている値を右詰めに変換します。 ゼロ詰め 変数に代入されている値を右詰めに変換します。さらに,値が数値の場合は,値の先頭までの空白に0を挿入します。 小文字変換 変数に代入されている値のうち,大文字を小文字に変換します。 大文字変換 変数に代入されている値のうち,小文字を大文字に変換します。 表5-2 変数に対して設定できる属性
属性 意味 整数型属性 変数に代入されている値を整数として扱います。
また,出力時の基数を定義できます。読み込み専用属性 変数を読み込み専用とします。 エクスポート属性 変数をエクスポートします。 書式および属性はtypesetコマンドで設定します。typesetコマンドの詳細については,「typesetコマンド(変数や関数の属性と値を明示的に宣言する)」を参照してください。
変数に対して書式を設定した例を次に示します。この例では,次の変数が定義されている場合を仮定しています(△は空白)。例の各行の右側には,定義内容に対する説明を記載しています。
STRn="△AbCdeFgHiJk△" NUMn="12345"
- ジョブ定義スクリプトの内容
typeset -L STR1 # STR1を左詰め書式に変更 echo $STR1 # STR1を出力 typeset -L5 STR2 # STR2を領域長5バイト,左詰め書式に変更 echo $STR2 # STR2を出力 typeset -R STR3 # STR3を右詰め書式に変更 echo $STR3 # STR3を出力 typeset -R4 NUM1 # NUM1を領域長4バイト,右詰め書式に変更 echo $NUM1 # NUM1を出力 typeset -Z9 STR4 # STR4を領域長9バイト,ゼロ詰め書式に変更 echo $STR4 # STR4を出力 typeset -Z9 NUM2 # NUM2を領域長9バイト,ゼロ詰め書式に変更 echo $NUM2 # NUM2を出力 typeset -l STR5 # STR5を小文字変換書式に変更 echo $STR5 # STR5を出力 typeset -u STR6 # STR6を大文字変換書式に変更 echo $STR6 # STR6を出力 typeset -i16 NUM3 # NUM3を16進数表記の整数型属性に変更 echo $NUM3 # NUM3を出力- 実行したジョブのSTDOUTファイルの内容
******** JOB SCOPE STDOUT ******** AbCdeFgHiJk ← STR1の出力結果 AbCde ← STR2の出力結果 AbCdeFgHiJk ← STR3の出力結果 2345 ← NUM1の出力結果 CdeFgHiJk ← STR4の出力結果 000012345 ← NUM2の出力結果 abcdefghijk ← STR5の出力結果 ABCDEFGHIJK ← STR6の出力結果 16#3039 ← NUM3の出力結果
All Rights Reserved. Copyright (C) 2011, 2012, Hitachi, Ltd.