同じジョブ定義スクリプトファイル内や外部ファイルに関数を定義すると使用できます。関数を定義する場合の書式を次に示します。
関数名() { |
function 関数名 { |
関数名の命名規則は変数と同じです。また,シェル標準コマンドと同名の関数を定義できません。変数の命名規則については,「5.1.2(1) 変数の作成」を参照してください。
関数を実行するジョブ定義スクリプトと異なるファイルに定義した場合,関数を実行する前にシェル標準コマンドの.(ドット)コマンドで関数を定義したジョブ定義スクリプトを呼び出す必要があります。.コマンドの書式を次に示します。.コマンドについては,「9.3 シェル標準コマンド」の「.コマンド(シェルスクリプトを実行する)」を参照してください。
. 関数を定義したファイル名 |
ジョブ定義スクリプト内で定義した関数の名称が,同一ジョブ定義スクリプト内,.(ドット)コマンドで呼び出したジョブ定義スクリプト内,または#-adsh_scriptコマンドで呼び出したジョブ定義スクリプト内で定義したほかの関数と重複していた場合,関数を実行する位置の直前に定義された関数が実行されます。
関数を実行する場合の書式を次に示します。関数には引数を指定できます。指定した引数は関数内では位置パラメーター$1以降に格納されます。
関数名 [args] |
なお,関数内の位置パラメーター$0には,書式に応じて次の内容が格納されます。
関数の引数の指定有無と位置パラメーターの関係を次の表に示します。
表5-3 関数の引数の指定有無と位置パラメーターの関係
関数呼び出し元の位置パラメーター | 関数の引数 | 関数開始時の位置パラメーター | 関数からの回復時の位置パラメーター |
---|---|---|---|
指定あり | 指定あり | 引数に指定された値 | 関数呼び出し元の位置パラメーターの値 |
指定あり | 指定なし | 値なし | 関数呼び出し元の位置パラメーターの値 |
指定なし | 指定あり | 引数に指定された値 | 値なし(関数呼び出し元の位置パラメーターの値) |
指定なし | 指定なし | 値なし | 値なし(関数呼び出し元の位置パラメーターの値) |
(1) 関数内ローカル変数
JP1/Advanced Shellでは,関数内でtypesetコマンドを使用して変数を定義すると,関数内で有効なローカル変数を定義できます。定義した変数は,関数が完了した時点で関数実行前の状態に回復されます。関数内ローカル変数の実行例を次に示します。
0001 : myfunc(){ # 関数myfuncの定義 |
******** JOB SCOPE STDOUT ******** |
(2) トレースモード
関数のトレースモードを有効にすることで,関数に記述されたコマンドを実行すると同時にコマンドの内容を標準エラー出力に出力できます。関数のトレースモードへの切り替えはシェル標準コマンドのtypesetコマンドで行います。typesetコマンドについては,「9.3 シェル標準コマンド」の「typesetコマンド(変数や関数の属性と値を明示的に宣言する)」を参照してください。