JP1/Advanced Shell
同じジョブ定義スクリプトファイル内や外部ファイルに関数を定義すると使用できます。関数を定義する場合の書式を次に示します。
- 書式1
関数名() { command : (略) }
- 書式2
function 関数名 { command : (略) }関数名の命名規則は変数と同じです。また,シェル標準コマンドと同名の関数を定義できません。変数の命名規則については,「5.1.2(1) 変数の作成」を参照してください。
関数を実行するジョブ定義スクリプトと異なるファイルに定義した場合,関数を実行する前にシェル標準コマンドの.(ドット)コマンドで関数を定義したジョブ定義スクリプトを呼び出す必要があります。.コマンドの書式を次に示します。.コマンドについては,「9.3 シェル標準コマンド」の「.コマンド(シェルスクリプトを実行する)」を参照してください。
. 関数を定義したファイル名ジョブ定義スクリプト内で定義した関数の名称が,同一ジョブ定義スクリプト内,.(ドット)コマンドで呼び出したジョブ定義スクリプト内,または#-adsh_scriptコマンドで呼び出したジョブ定義スクリプト内で定義したほかの関数と重複していた場合,関数を実行する位置の直前に定義された関数が実行されます。
関数を実行する場合の書式を次に示します。関数には引数を指定できます。指定した引数は関数内では位置パラメーター$1以降に格納されます。
関数名 [args]なお,関数内の位置パラメーター$0には,書式に応じて次の内容が格納されます。
- 書式1で定義した関数の場合,シェルスクリプト名称が格納される。
- 書式2で定義した関数の場合,関数名が格納される。
関数の引数の指定有無と位置パラメーターの関係を次の表に示します。
表5-3 関数の引数の指定有無と位置パラメーターの関係
関数呼び出し元の位置パラメーター 関数の引数 関数開始時の位置パラメーター 関数からの回復時の位置パラメーター 指定あり 指定あり 引数に指定された値 関数呼び出し元の位置パラメーターの値 指定あり 指定なし 値なし 関数呼び出し元の位置パラメーターの値 指定なし 指定あり 引数に指定された値 値なし(関数呼び出し元の位置パラメーターの値) 指定なし 指定なし 値なし 値なし(関数呼び出し元の位置パラメーターの値)
- <この項の構成>
- (1) 関数内ローカル変数
- (2) トレースモード
JP1/Advanced Shellでは,関数内でtypesetコマンドを使用して変数を定義すると,関数内で有効なローカル変数を定義できます。定義した変数は,関数が完了した時点で関数実行前の状態に回復されます。関数内ローカル変数の実行例を次に示します。
- ジョブ定義スクリプトの内容
0001 : myfunc(){ # 関数myfuncの定義 0002 : typeset -r var=abc # 関数内ローカル変数にvarを読み込みで定義 0003 : echo $var # 変数varの値を出力 0004 : readonly -p # 読み込み専用属性の変数を出力 0005 : return 0 0006 : } 0007 : typeset -i var=123 # 変数varを整数型で定義 0008 : typeset | grep var # 変数varの属性を出力 0009 : myfunc # 関数myfuncを実行 0010 : echo $var # 関数実行後の変数varの値を出力 0011 : readonly -p # 読み込み専用属性の変数を出力 0012 : typeset | grep var # 変数varの属性を出力 0013 : exit 0 0014 :
- 実行ジョブのSTDOUTファイルの内容
******** JOB SCOPE STDOUT ******** typeset -i var ←8行目の結果。変数varは整数型で定義済み abc ←3行目の結果。変数varはabcに更新 readonly var=abc ←4行目の結果。変数varは読み込み専用属性 123 ←10行目の結果。関数完了後,変数varの値は回復 typeset -i var ←12行目の結果。8行目の出力結果と同じ
関数のトレースモードを有効にすることで,関数に記述されたコマンドを実行すると同時にコマンドの内容を標準エラー出力に出力できます。関数のトレースモードへの切り替えはシェル標準コマンドのtypesetコマンドで行います。typesetコマンドについては,「9.3 シェル標準コマンド」の「typesetコマンド(変数や関数の属性と値を明示的に宣言する)」を参照してください。
All Rights Reserved. Copyright (C) 2011, 2012, Hitachi, Ltd.