シェルスクリプトマガジン

特集3 ユニケージ開発手法入門(Vol.60掲載)

著者:當仲寛哲

業務システムを開発するときの選択肢として「ユニケージ
開発手法」があります。ユニケージ開発手法は、Linux/UNIX
のコマンドを基盤としたものです。「シェル魔人」と「りな」
の会話を通して、ユニケージ開発手法で業務システムがど
う作られるのかを理解しましょう。

シェルスクリプトマガジン Vol.60は以下のリンク先でご購入できます。

図4 ユニケージ開発手法によるシェルスクリプトの記述例

#!/bin/bash -vx
#
# JIKANTAI.CGI 時間帯別販売情報参照システムのCGI スクリプト
(略)
# POST データの受け取り
if [ ! -z "$CONTENT_LENGTH" ] ; then
dd bs=$CONTENT_LENGTH |
cgi-name -n_ -s_ > $tmp-name
ERROR_CHECK
else
(略)
# はめ込み用日付情報の作成
echo $day $cday                            |
# 1: 日付 2: 比較日コード
join1 key=2 $tmp-cdaynum -                 |
# 1: 日付 2: 比較日コード 3: 比較日
delf 2                                     |
# 1: 日付 2: 比較日
dayslash --output "yyyy 年_mm 月_dd 日" 1 2 |
cat > $tmp-day
ERROR_CHECK
# 現在時刻
curtime="$(dayslash -d $todayhms --output 'yyyy 年 mm 月 dd 日 HH:MM:SS')"
##################################################
# HTML 作成
cat $apld/HTML/JIKANTAI.HTML               |
mojihame -lSHOP_RECORDS - $tmp-data        |
mojihame -lSYOHIN_INFO - $tmp-info         |
mojihame -lSEARCH_DATE - $tmp-day          |
formhame -s_ -n_ - $tmp-name               |
calsed '###CURRENT_TIME###' "$curtime"     |
calsed '###USER###' "$USER"                |
cat > $tmp-html

図19 セールスレポートを作成するシェルスクリプト(demo)

#!/bin/bash -x
join1 key=2 PRICE SALES       | # 原価/ 売価を連結
join1 key=2 CATEGORY          | # カテゴリを連結
lcalc '$3,$7,$8,$8-$7*$4'     | # 売数/ 売上/ 荒利計算
msort -p4 key=1               | # カテゴリでソート
sm2 1 1 2 4                   | # 売数/ 売上/ 荒利集計
sm5 1 1 2 4                   | # 合計行の付加
divsen 2 3 4                  | # 千で除算
divsen 3 4                    | # 千で再除算
lcalc '$1,$2,$3,$4,100*$4/$3' | # 荒利率を求める
marume 5.1                    | # 四捨五入
join2 key=1 CATEGORY_NAME     | # カテゴリ名の連結
comma 3 4 5                   | # カンマ編集
keta                          | # 桁そろえ
keisen +e                     | # 罫線を引く
cat header -                    # 出力
exit 0

図21 コメントを入れた例

#!/bin/bash
# 商品コードに、原価/売価を連結
join1 key=2 PRICE SALES       |
# 商品コードにカテゴリーコードを連結
join1 key=2 CATEGORY          |
# [ レイアウト ]
# 1:店コード 2:商品コード 3:カテゴリコード 4:仕入価格 5:販売価格
# 6:販売日付 7:販売個数 8:販売金額 9:値引金額
# カテゴリコード、売数、売上、粗利(売上-売数x仕入価格)を計算
lcalc '$3,$7,$8,$8-$7*$4'     |
# [ レイアウト ]
# 1:カテゴリコード 2:販売個数 3:販売金額 3:粗利金額
msort -p4 key=1               | # カテゴリでソート
sm2 1 1 2 4                   | # 売数 / 売上 / 粗利集計
sm5 1 1 2 4                   | # 合計行の付加
divsen 2 3 4                  | # 千で除算
divsen 3 4                    | # 千で再除算 (売上・粗利は百万円単位)
# 粗利率を求める
lcalc '$1,$2,$3,$4,100*$4/$3' |
# [ レイアウト ]
# 1:カテゴリコード 2:販売個数 3:販売金額 4:粗利金額 5:粗利率
# 粗利率を四捨五入
marume 5.1                    |
# カテゴリ名の連結
join2 key=1 CATEGORY_NAME     |
# [ レイアウト ]
# 1:カテゴリコード 2:カテゴリ名 3:販売個数 4:販売金額 5:粗利金額
# 6:粗利率
comma 3 4 5                   | # カンマ編集
keta                          | # 桁そろえ
keisen +e                     | # 罫線を引く
cat header -                    # 出力
exit 0

図25 最新のレベル4を出力する

echo LV1.101.*      |
xargs cat           |
msort key=1@NF      |
upl key=1@NF LV4 -