• ベストアンサー

シェルスクリプトについて

初心者なので、あまり理解していませんが、 シェルスクリプトからCOBOLソースをCALLして、 COBOLでのリターン値を取得したいのですが、 一度に複数のリターン値を取得できるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

>例えば、シェルからCOBOLプログラムをCALLして、 >COBOLプログラムで得た、日付と金額をシェルに返したい場合は、どのように行えばよろしいでしょうか? そういうのは、リターン値と言わず、処理結果などと言います。 COBOLプログラムで (前略) 1 OUT-DATA.  5 HIZUKE PIC X(10).  5 FILLER PIC X VALUE SPACE.  5 KINGAKU PIC 9(8). (中略)  MOVE '2005/04/22' TO HIZUKE.  MOVE 1050 TO KINGAKU.  DISPLAY OUT-DATA. (後略) シェルでは、種類によって違いますが、プログラム名をcblpgmとして、 (1) sh の場合 set -- `cblpgm` echo 日付け=$1 金額=$2 (2) bash の場合 A=(`cblpgm`) echo 日付け=${A[0]} 金額=${A[1]} (3) csh の場合 set a=(`cblpgm`) echo 日付け=$a[1] 金額=$a[2]

その他の回答 (2)

回答No.2

リターン値(戻り値)は1つしかありません。 で呼ばれた方から呼び元へ複数の値を返す考え方は2つあります。 1つは、複数の値を一定の規則で1つに合成して リターン値として返し、 呼び元で元に戻すという方法です。 もう1つは、引数のアドレス渡し・・・。 (普段、無意識で行っているのは値渡しと言います。) 返して欲しい値を設定して欲しい変数のアドレスを引数として渡す方法です。 COBOL は、変数のアドレス指定が出来たはずなので・・・。 ただ、シェルスクリプト側で変数のアドレスが使えたかはちょっと知識不足で・・・。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

プログラムのリターン値って元々1つしかありません。 「複数のリターン値」ってどういう意味でしょう? COBOLの場合、リターンコードは、 MOVE 1 TO RETURN-CODE. のように特殊変数に整数値をセットし、それをシェルでは $? という特殊変数で参照します。 何か複数の処理結果を得たいなら、リターンコードではなく、標準出力に文字列で書き出してそれを使うんでしょうね。

Soccer1919
質問者

補足

早速のご回答、ありがとうございます。 記述が悪くて申し訳ありませんでした。 細かい話になってしまいますが、 例えば、シェルからCOBOLプログラムをCALLして、 COBOLプログラムで得た、日付と金額をシェルに返したい場合は、どのように行えばよろしいでしょうか?

関連するQ&A