Lesson5まで終えた時点で、売上データから一つの帳票(時間別売上)が完成するに至った。そこではデータの解凍から始まって以下に示すように11回コマンドを実行することによって達成された。
bash $ gunzip -c /home/practice/Mine/Data/StoreMaster1/Dat/dat.gz
>dat1-1
bash $ mselstr field=2 string=19981010,19981011,19981012 <dat1-1-1 >dat2-1 (OK) mselstr field=2 string=19981010,19981011,19981012 [In:107473 Out:1034 1998/04/09 17:52:34] bash $ mcut field=3,14,13 <dat2-1 >dat2-2 (OK) mcut field=3,14,13 [In:1034 Out:1034 1998/04/09 17:58:42] bash $ sort <dat2-2 >dat1-3-1 bash $ msum key=1 field=2,3 <dat3-1 >dat3-2 (OK) msum key=1 field=2,3 [In:1034 Out:12 1998/04/09 17:52:34] bash$ sort -n <dat3-2 >dat4-1 bash$ echo '時間別売上数量金額' >xxtitle bash$ echo 'Lesson5にて作成' >>xxtitle bash$ date >>xxtitle bash$ echo ':時間: 数量: 金額:' >>xxfield bash$ mlist2 title=xxtitle field=xxfield <dat4-1 >dat5-1 |
各コマンドはコマンドライン上から入力され実行してきた。しかしながらこの方法には次のような欠点がある。
1)間違えて入力した場合、その修正のために再びコマンドを打ち直さなければならない。
2)どのような処理をしたかに関する履歴が残らない。
一つ目の欠点に関しては、キー入力の補助(bashやtcshには実装されている)を使うことによって解決される。しかし2つ目の欠点は次のような場合、致命的となる場合が多い。
a)帳票ができあがり、その帳票が印刷された。そして数日後、その帳票に誤りがあるのではないかと気付いた。しかし、どのように処理したか(どのようにコマンドを実行したか)に関する履歴がないために、それが誤りであるかどうか、確認することができない。
b)時間別売上数量金額の帳票を仕上げた後で、日別の売上数量金額の帳票を作成したいと思った。もしコマンドの履歴があれば、最初のmcutのパラメータを変更するだけでよいにもかかわらず、最初からすべてを入力する必要が生じる。
さて、これらの問題を解決するのがバッチ(もしくはシェルスクリプト)と呼ばれるものである。バッチ処理とは一括処理と訳される。すなわちここでは、コマンドをまとめて処理するという意味である。11個のコマンドをあらかじめテキストファイルとして用意し、その後に一括して実行する。また、そのファイルはbashやcshといったシェルが解釈し実行するという意味でシェルスクリプト(直訳すると「記述」)と呼ばれる。
bash$ jvim bat6-1 |
バッチファイルを書く時は1行目を空けること!
gunzip -c /home/practice/Mine/Data/StoreMaster1/Dat/dat.gz >xxa mselstr field=2 string=19981010,19981011,19981012 <xxa >xxb mcut field=3,14,13 <xxb >xxc sort <xxc >xxd msum key=1 field=2,3 <xxd >xxe sort -n <xxe >xxf echo '時間別売上数量金額' >xxtitle echo 'Lesson5にて作成' >>xxtitle date >>xxtitle echo ':時間: 数量: 金額:' >>xxfield mlist2 title=xxtitle field=xxfield <xxf >xxtmp |
bash$ bash bat6-1 |
bash$ bash bat6-1 |
bash$ cp bat6-1 bat6-2 |
echo '時間別売上数量金額' >xxtitle
echo 'Lesson5にて作成' >>xxtitle date >>xxtitle echo ':時間: 数量: 金額:' >>xxfield #入力ファイルの項目番号
|
:
: gunzip -c /home/practice/Mine/Data/StoreMaster1/Dat/dat.gz | mselstr field=2 string=19981010,19981011,19981012 | mcut field=3,14,13 | sort | msum key=1 field=2,3 | sort -n | mlist2 title=xxtitle field=xxfield >xxtmp |
echo '時間別売上数量金額' >xxtitle
echo 'Lesson5にて作成' >>xxtitle date >>xxtitle echo ':時間: 数量: 金額:' >>xxfield #入力ファイルの項目番号
mlist2 title=xxtitle field=xxfield <dat6-1
>dat6-2
|