Más contenido relacionado
Similar a OSC2012 Tokyo Spring, USP lab. presentation (20)
OSC2012 Tokyo Spring, USP lab. presentation
- 2. 発表内容
● シェルスクリプトを何に使う?
● シェルスクリプトは本当に素敵なのか?
● 便利なコマンドを公開
● Open usp Tukubai
● まとめ
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 2
- 3. 「シェルスクリプト」何に使う?
● Facebookで聞いてみた
● 上位
– 定型処理の自動化
– バックアップ
– その場限りのデータ集計
– スタートスクリプト作成
– いたずら
● どちらかというと
– ちょっとしたもの、あるいはシステム寄り
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 3
- 4. USP研究所の「シェルスクリプト」
● アプリケーション寄り
● バッチデータ処理
● 帳票を作る
– データからpdfやexcel、グラフを作る
● CGIスクリプト
– bashCMS(社員作)
● 世間とのギャップが激しい
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 4
- 5. ごく大雑把なギャップの分析
法人・仕事
COBOL シェルスクリプト
(USP研究所)
Java
フロント
バック Python PHP エンド・
エンド
データベース web
Ruby
シェル (RDBMS)
スクリプト
(一般)
個人、趣味、ベンチャー
● とにかくRDBMS(以後単にDBと表記)にデータを突っ込む →
シェルスクリプトの出る幕なし
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 5
- 6. 「なんでもDB」でいいのか?
● よい。それは否定しなくてよい。
● もうSQLに慣れた。誰でも慣れたツールを使いたい
● いたれりつくせり(排他など)
● Webとのつなぎが簡単
● しかし、
● 手元のデータをもっと手軽にハンドリングできれば
そっちも使ってよいだろう。そんな方法があれば。
● (言語にこだわる人がSQLを手放しで受け入れるのは解せない)
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 6
- 7. シェルスクリプトにも問題
● モダンな言語に比べて制御構文が読みにくい
● If [ 3 -lt “${A}” -a 5 -gt “{B}” -o “${HOGE}” = “HOGE” ]
● ↑読めん。読む気がしない
● 気が利かない
● これをしたいのに、このコマンドがない
-> シェル文法地獄 -> 詰んだ!
※コマンドが揃ってのシェルスクリプト!!
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 7
- 8. コマンドがあると無いで大違い1
● 例:自然数を読んで偶数だけ出力
● こんなことをしてはいけません
– 注:コマンドの使用が制限されている状況は除く
#!/bin/bash
while read n ; do
if [ $((n%2)) -eq 0 ] ; then
echo $n
fi
done
● コマンドの力を借りると制御構文が無くなる
– awk '$1%2==0' < /dev/stdin
– grep “[02468]$” < /dev/stdin
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 8
- 9. コマンドがあると無いで大違い2
● これはどうか?詰んではいないが・・・
● 1月の日付を列挙する
#!/bin/bash
n=20120101
while [ $n -lt 20120201 ] ; do
echo $n
n=$(date -d "$n 1 day" +%Y%m%d)
done
● これは代替の方法を考えるのが大変だ
便利なコマンドがあればいいな!!!
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 9
- 10. Open usp Tukubai
● フリーのコマンド群
● USP研究所が使っているものの一部を書き直し
– Pythonで短く
– MITライセンス
● コマンド
– cgi-name, check_attr_name, check_need_name, comma,
count, ctail, delf, divsen, getfirst, getlast, gyo, han, join0, join1,
join2, juni, kasan, keta, keycut, loopj, loopx, map, marume,
mdate, mime-read, mojihame, nameread, plus, rank, ratio,
retu, self, sm2, sm4, sm5, tarr, tateyoko, tcat, unmap, up3,
yarr, ycat, yobi, ysum, zen
– 日本語名のコマンドがあるが、これを外国人に使わせるのが目標
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 10
- 11. 何ができるか
● CUIでデータを扱う方法の延長
● 典型的な端末のファイル処理
– catでファイルをざっと閲覧、grepで行を抽出、
sedで置換、sortでソート・・・
● 以下の機能をコマンドで付加する
– 表計算
– リレーショナル演算
– その他便利機能(全角<->半角、四捨五入、カンマ打ち)
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 11
- 12. 使ってみる1 --- han, zen
● 全角半角の混在
$ cat phone-no
001 067ー4321ー8834 志村県加藤市高木町1-9ー3
002 0120-212ー212 仲本県碇谷群荒井町茶123ー21
● 「han」を使うと半角にできるものは半角に
$ cat phone-no | han
001 067ー4321ー8834 志村県加藤市高木町1-9ー3
002 0120-212ー212 仲本県碇谷群荒井町茶123ー21
● 住所の番地を全角に戻す
$ cat phone-no | han | zen 3
001 067ー4321ー8834 志村県加藤市高木町1-9ー3
002 0120-212ー212 仲本県碇谷群荒井町茶123ー21
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 12
- 13. 使ってみる2 --- keta
● 列を揃える
見づらい
見やすい
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 13
- 14. 使ってみる3 --- join1
● データの結合
データ:http://www.pursue.ne.jp/jouhousyo/SQLDoc/select21.html
売上データ 顧客データ
$ cat uriage $ cat kokyaku
1 2001/05/27 105 101 二島商店
2 2001/05/27 101 102 姫路商事
3 2001/05/27 103 103 大阪物産
4 2001/06/27 102 104 神戸商店
5 2001/06/27 104 105 福岡商事
データを結合する
$ sort -k3,3 uriage | join1 key=3 kokyaku - | sort
1 2001/05/27 105 福岡商事
2 2001/05/27 101 二島商店
3 2001/05/27 103 大阪物産
4 2001/06/27 102 姫路商事
5 2001/06/27 104 神戸商店
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 14
- 15. 使ってみる4 --- mdate, yobi
● 日付の列挙
$ mdate -e 20120101 20120110
20120101 20120102 20120103 20120104 20120105 20120106 20120107
20120108 20120109 20120110
● 2月末日は?
$ mdate 20120301/-1
20120229
● 曜日をつける
$ mdate -e 20120101 20120104 | tarr | yobi -j 1
20120101 日
20120102 月
20120103 火
20120104 水
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 15
- 16. 使ってみる5 --- count, sm2
● 数え上げ $ cat data
山田
山田
上田 $ sort data | count 1 1
山田 山田 4
山田 上田 2
上田
● 集計
$ cat data
001 23324
001 1235 $ sm2 1 1 2 2 data
002 3243 001 24559
002 -32345 002 -29102
003 425 003 392.65
003 0.15
003 -32.5
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 16
- 17. 使ってみる6 --- webシステム
● bashCMS
● USP友の会のブースで展示。ソース見せます。
http://www.usptomonokai.jp/
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 17
- 18. Open usp Tukubaiの入手 ---その1
● FreeBSD ports
● 収録されました (/usr/ports/devel/open-usp-tukubai)
● 当面、portsnap extract または
portsnap update で入手
http://www.freshports.org/devel/open-usp-tukubai/
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 18
- 19. Open usp Tukubaiの入手 ---その2
● github
● Tukubaiで検索
https://github.com/usp-engineers-community/Open-usp-Tukubai
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 19
- 20. Open usp Tukubaiの入手 ---その3
● UECサイト(usp engineers' community)
● https://uec.usp-lab.com
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 20
- 21. まとめ
● コマンドあってのシェルスクリプト
● コマンドを使わないと素敵ではない
● Open usp Tukubaiは便利
● 端末・シェルスクリプトをどんどん便利にする試み
● FreeBSD, GitHub, uecサイトで入手可能
● Software Design 連載もお願いします(17日発売)
● 開眼シェルスクリプト
– 第4回:表とグラフを描く――HTMLファイルの出力
–
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 21
–