OSC2012 Tokyo Spring, USP lab. presentation
-
Upload
ryuichi-ueda -
Category
Technology
-
view
5.406 -
download
0
description
Transcript of OSC2012 Tokyo Spring, USP lab. presentation
☆さわって ドキドキ。♡こんなに素敵 なシェルスクリプト。
(注:登壇者が考えたタイトルではありません!!)
USP研究所 上田隆一
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 2
発表内容
● シェルスクリプトを何に使う?
● シェルスクリプトは本当に素敵なのか?
● 便利なコマンドを公開
● Open usp Tukubai● まとめ
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 3
「シェルスクリプト」何に使う?
● Facebookで聞いてみた● 上位
– 定型処理の自動化
– バックアップ
– その場限りのデータ集計
– スタートスクリプト作成
– いたずら
● どちらかというと
– ちょっとしたもの、あるいはシステム寄り
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 4
USP研究所の「シェルスクリプト」● アプリケーション寄り
● バッチデータ処理
● 帳票を作る
– データからpdfやexcel、グラフを作る● CGIスクリプト
– bashCMS(社員作)
● 世間とのギャップが激しい
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 5
ごく大雑把なギャップの分析
● とにかくRDBMS(以後単にDB → と表記)にデータを突っ込むシェルスクリプトの出る幕なし
個人、趣味、ベンチャー個人、趣味、ベンチャー
法人・仕事法人・仕事
フロントフロントエンド・エンド・webweb
Java
Ruby
バックバックエンドエンド
COBOL
Pythonデータベースデータベース((RDBMS)RDBMS)シェルシェル
スクリプトスクリプト(一般)(一般)
シェルスクリプトシェルスクリプト((USPUSP研究所)研究所)
PHP
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 6
「なんでもDB」でいいのか?
● よい。それは否定しなくてよい。
● もうSQLに慣れた。誰でも慣れたツールを使いたい● いたれりつくせり(排他など)
● Webとのつなぎが簡単● しかし、
● 手元のデータをもっと手軽にハンドリングできればそっちも使ってよいだろう。そんな方法があれば。
● (言語にこだわる人がSQL )を手放しで受け入れるのは解せない
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 7
シェルスクリプトにも問題
● モダンな言語に比べて制御構文が読みにくい● If [ 3 -lt “${A}” -a 5 -gt “{B}” -o “${HOGE}” = “HOGE” ] ● ↑読めん。読む気がしない
● 気が利かない
● これをしたいのに、このコマンドがない-> -> シェル文法地獄 詰んだ!
※コマンドが揃ってのシェルスクリプト!!
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 8
コマンドがあると無いで大違い1● 例:自然数を読んで偶数だけ出力
● こんなことをしてはいけません
– 注:コマンドの使用が制限されている状況は除く
● コマンドの力を借りると制御構文が無くなる
– awk '$1%2==0' < /dev/stdin– grep “[02468]$” < /dev/stdin
#!/bin/bashwhile read n ; do if [ $((n%2)) -eq 0 ] ; then echo $n fidone
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 9
コマンドがあると無いで大違い2
● これはどうか?詰んではいないが・・・
● 1月の日付を列挙する
● これは代替の方法を考えるのが大変だ
#!/bin/bashn=20120101while [ $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 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 11
何ができるか
● CUIでデータを扱う方法の延長● 典型的な端末のファイル処理
– catでファイルをざっと閲覧、grepで行を抽出、sedで置換、sortでソート・・・
● 以下の機能をコマンドで付加する
– 表計算
– リレーショナル演算
– <->その他便利機能(全角 半角、四捨五入、カンマ打ち)
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 12
使ってみる1 --- han, zen● 全角半角の混在
● 「han」を使うと半角にできるものは半角に
● 住所の番地を全角に戻す
$ cat phone-no 001 0 34 67ー4321ー88 1-志村県加藤市高木町 9ー3002 0 0- 212 12 212ー 123 2仲本県碇谷群荒井町茶 ー 1
$ cat phone-no | han001 067 4321 8834 ー ー 1-9 3志村県加藤市高木町 ー002 0120-212 212 ー 123 21仲本県碇谷群荒井町茶 ー
$ cat phone-no | han | zen 3001 067 4321 8834 ー ー 志村県加藤市高木町1-9ー3002 0120-212 212 ー 仲本県碇谷群荒井町茶123ー21
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 13
--- 使ってみる2 keta● 列を揃える
見づらい
見やすい
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 14
--- 使ってみる3 join1● データの結合
データ:http://www.pursue.ne.jp/jouhousyo/SQLDoc/select21.html
$ cat uriage1 2001/05/27 1052 2001/05/27 1013 2001/05/27 1034 2001/06/27 1025 2001/06/27 104
$ cat kokyaku101 二島商店102 姫路商事103 大阪物産104 神戸商店105 福岡商事
売上データ売上データ 顧客データ顧客データ
$ sort -k3,3 uriage | join1 key=3 kokyaku - | sort1 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 15
使ってみる4 --- mdate, yobi● 日付の列挙
● 2月末日は?
● 曜日をつける
$ mdate -e 20120101 2012011020120101 20120102 20120103 20120104 20120105 20120106 20120107 20120108 20120109 20120110
$ mdate 20120301/-120120229
$ mdate -e 20120101 20120104 | tarr | yobi -j 120120101 日20120102 月20120103 火20120104 水
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 16
使ってみる5 --- count, sm2● 数え上げ
● 集計$ cat data001 23324001 1235002 3243002 -32345003 425003 0.15003 -32.5
$ sm2 1 1 2 2 data001 24559002 -29102003 392.65
$ cat data山田山田上田山田山田上田
$ sort data | count 1 1 4山田 2上田
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 17
使ってみる6 --- webシステム● bashCMS
● USP友の会のブースで展示。ソース見せます。
http://www.usptomonokai.jp/
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 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 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 20
Open usp Tukubai ---の入手 その3● UECサイト(usp engineers' community)
● https://uec.usp-lab.com
Mar. 16, 2012 Open Source Conference 2012 Tokyo/Spring 21
まとめ
● コマンドあってのシェルスクリプト
● コマンドを使わないと素敵ではない
● Open usp Tukubaiは便利● 端末・シェルスクリプトをどんどん便利にする試み
● FreeBSD, GitHub, uecサイトで入手可能
● Software Design 17連載もお願いします( 日発売)
● 開眼シェルスクリプト
– 4第 回: ――表とグラフを描く HTMLファイルの出力–
–