今回は、シェルで外部ファイルを読み込む方法を紹介します。
シェルファイルは、非常に強力なスクリプトです。
使い方によっては、ちょっとした機能は実現することができます。
目次
外部ファイルの読み込みパターン
外部ファイルを読み込むパターンとして、以下の2パターンについて説明します。
- 外出し定義ファイルの読み込み
- シェルからシェルを呼び出す
外出し定義ファイルの読み込み
シェルでちょっとした機能を実現する際に、さまざまなパラメータを外部ファイルに定義することが必要になる場合があります。
ファイル読み込み・書き込み系のシェルであればファイルパスを外部ファイルに定義したり、ですね。
そういった外部ファイル定義についてもシェルで可能です。
外部ファイル読み込みのサンプルシェル
サンプルシェルは以下になります。
#!/bin/sh # # 外部ファイルの読み込み # echo "start." while read line do KEY=`eval echo $line | awk '{print $1}'` VAL=`eval echo $line | awk '{print $2}'` echo $KEY echo $VAL done < setting.config echo "end."
外部ファイルとなる「setting.config」は以下です。
line1 value1 line2 value2 line3 value3
実行結果は以下になります。
$ sh configLoad.sh start. line1 value1 line2 value2 line3 value3 end.
行データを繰り返し読み込む
行データを読み込む方法は以下になります。
while文で、自動的に最終行まで外部ファイルの読み込みをおこなっていきます。
読み込み対象ファイルをdone部分に記載することで、対象ファイルの読み込むをおこないます。
上記サンプルプログラムは、シェルファイルと同フォルダに、外部ファイルとなる「setting.config」が存在する状態のシェルファイルとなります。
while read line do ・・・制御・・・ done < 設定ファイルパス
lineに1行データが格納されるので、”・・・制御・・・”の部分にlineに対する処理を記載することになります。
awk(オーク)コマンドで列ごとに読み込み
awk(オーク)コマンドは、文字列を抽出するコマンドになります。
{print $N}で、N番目の列を抽出することができます。
上記のサンプルプログラムは、2列の行データなので、{print $2}までしかないですが、列をもっと増やしていきたい場合は、{print $3}といった具合に列の数を増やしていけば、対象の列データを読み込むことができます。
シェルからシェルを呼び出す
共通機能を定義したシェルを準備した場合、そのシェルを他のシェルから呼び出したい場合があります。
つまり、シェルからシェルを呼び出す、ということですね。
シェルからシェルを呼び出すサンプル
サンプルシェルは以下になります。
呼び出すシェルと呼び出されるシェルの2つになります。
呼び出す側のシェル
#!/bin/bash `./sub.sh` RET=$? echo $RET
呼び出される側のシェル
#!/bin/sh exit 10
シェルを呼び出す
シェルを呼び出す場合の記載は簡単です。
シェルのパスを「`」で囲めば呼び出すことができます。
`./sub.sh`
シェルから返り値を受け取る
シェルから返り値を受け取る場合は、呼び出される側は「$?」で取得できます。
RET=$?
呼び出される側は、「exit」を用いて返り値を返却できます。
exit 10