シェルスクリプトによるデータ処理

シェルスクリプトによるデータ処理

(一部工事中、順次拡張予定)

シェルスクリプトの基本

シェルスクリプトは、言語というよりはコマンド群のようなもので、 CやFortranと異なりコンパイルせずに使うことができる。 ここでは、大概のUNIXシステムで使うことのできるBシェルを扱う。

シェルスクリプトの一番簡単な使い方は、ただコマンドを羅列することである。

上記のファイルを例えばtest.shとする。実行するには、ファイルに実行許可を与えてからファイル名を打つ。

echo文が実行され、"This is B-shscript."という出力がなされ、ディレクトリ内のファイル一覧が出され、最後にディレクトリが一つ上がったはずである。 一行目がシェルスクリプトを示す宣言となるので、必ず入れよう。その宣言文の後に、自分の好きなコマンドを書けばよい。

例えば、夜自宅に帰る前に、CALC1・CALC2というプログラムを走らせておきたい場合は、

として、 としておけば、次の朝に(計算が終わっていれば)結果が出ていることになる。

なお、#を付けると、それより後ろは改行までコメント文として認識される。


シェルスクリプトの書き方

もう少し複雑なことを実行させてみよう。なお、今後例として示すファイルは、aionまたはshannonの
~nogu/Lecture/shscript
に置いてあるので、適宜自分のディレクトリにコピーして使ってよい(以下同様)。

最初の例は、引数をチェックして取り込む基本的なシェルスクリプトである。

ファイル名:basic.sh

入力した文字列をそのまま返している。 if文内では引数の解析を行い、引数の個数が一つであるとき以外は使用法を表示して終了する。 次に、変数ARGV1に引数を代入し、echo文でARGV1を出力している。以下が実行例である。 ここで、シェルスクリプトにおける変数の約束ごとを挙げる。

for文

次の例は、for文の例である。 ファイル名:for.sh 実行結果は この例文では、for文で変数NUMに0から3までの文字を順に代入してその文字を出力している。 inの後に続くのは、例えば のように、文字でさえあれば何でも良い。これらの例では、全てAAA変数にその後に羅列してある文字が代入されながらループ文が回る。


while文

for文では、変化させる文字を全て書かないとならないので、単に変数を1ずつ増やしていきたいときには面倒である。次の文は、変数iを1ずつふやしていくものである。

ファイル名:while.sh

出力結果は ここで、exprコマンドは、簡単な整数の四則演算をさせるコマンドである。 また、while文内の[]は条件部で、この値がゼロ(真)の時にdo以下の命令が実行される。 整数を判断する条件部には、例えば次のようなものがある(右のコメントの条件が満たされた場合に、真となる。) なお、文字列が等しいかを判断するのは、-eqではなくて=なので注意すること。 while文では、次のような処理も可能である。入力ファイルには、3列のデータを使う(test.datとして用意してある)。

ファイル名:while_read.sh


if文

すでにif文は出てきているが、機能の例を挙げて詳しく解説しておく。 条件の前に!をつけると、直後の条件を否定する。

なお、while文で出てきた[]の条件部は、if文にもそのまま使える。


コマンドの実行結果の変数への代入

変数に何かのコマンドの実行結果を代入することができる。 ``は、シングルコーテーション('')ではないことに注意。``の中には、普通にUNIXの端末で打つコマンドを何でも入れることができる。


応用例 シェルからgnuplotを走らせる

次の例文は、gnuplotを用いてsin関数をプロットさせるスクリプトだが、 gnuplot内で使う変数、つまり図のタイトルや描画するxの範囲をUNIXコマンドの引数から与えられるところがミソである。

ファイル名:gnuplot.sh

うまくできたかは、gvで確認する。 「gnuplot <<EOF」行から最後の「EOF」行までの間にgnuplotのコマンドを書いておく。 空行をあけることはできないので注意する。 どうしてもあけたい場合は、下のように#ではじまるコメント行を入れると良い。


計算機によるデータ解析入門のページに戻る

野口のTopページに戻る

情報科学科のTopページに戻る