さわって☆ドキドキ。
こんなに素敵♡なシェルスクリプト。

(注:登壇者が考えたタイトルではありません!!)

      USP研究所 上田隆一
発表内容
 ●   シェルスクリプトを何に使う?
 ●   シェルスクリプトは本当に素敵なのか?
 ●   便利なコマンドを公開
      ●   Open usp Tukubai
 ●   まとめ




Mar. 16, 2012        Open Source Conference 2012 Tokyo/Spring   2
「シェルスクリプト」何に使う?
●   Facebookで聞いてみた
    ●   上位
         –   定型処理の自動化
         –   バックアップ
         –   その場限りのデータ集計
         –   スタートスクリプト作成
         –   いたずら

    ●   どちらかというと
         –   ちょっとしたもの、あるいはシステム寄り
Mar. 16, 2012         Open Source Conference 2012 Tokyo/Spring   3
USP研究所の「シェルスクリプト」
●    アプリケーション寄り
      ●   バッチデータ処理
      ●   帳票を作る
           –   データからpdfやexcel、グラフを作る
      ●   CGIスクリプト
           –   bashCMS(社員作)



      ●   世間とのギャップが激しい

    Mar. 16, 2012      Open Source Conference 2012 Tokyo/Spring   4
ごく大雑把なギャップの分析
                                 法人・仕事


                COBOL                            シェルスクリプト
                                                 (USP研究所)
                                                                   Java
                                                                          フロント
 バック                                                    Python PHP        エンド・
 エンド
                          データベース                                          web
                                                                   Ruby
                シェル       (RDBMS)
                スクリプト
                (一般)
                           個人、趣味、ベンチャー
  ●   とにかくRDBMS(以後単にDBと表記)にデータを突っ込む →
      シェルスクリプトの出る幕なし
Mar. 16, 2012           Open Source Conference 2012 Tokyo/Spring             5
「なんでもDB」でいいのか?
 ●   よい。それは否定しなくてよい。
      ●   もうSQLに慣れた。誰でも慣れたツールを使いたい
      ●   いたれりつくせり(排他など)
      ●   Webとのつなぎが簡単
 ●   しかし、
      ●   手元のデータをもっと手軽にハンドリングできれば
          そっちも使ってよいだろう。そんな方法があれば。
      ●   (言語にこだわる人がSQLを手放しで受け入れるのは解せない)


Mar. 16, 2012     Open Source Conference 2012 Tokyo/Spring   6
シェルスクリプトにも問題
 ●   モダンな言語に比べて制御構文が読みにくい
      ●   If [ 3 -lt “${A}” -a 5 -gt “{B}” -o “${HOGE}” = “HOGE” ]
      ●   ↑読めん。読む気がしない

 ●   気が利かない
      ●   これをしたいのに、このコマンドがない
           -> シェル文法地獄 -> 詰んだ!

           ※コマンドが揃ってのシェルスクリプト!!
Mar. 16, 2012             Open Source Conference 2012 Tokyo/Spring   7
コマンドがあると無いで大違い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
コマンドがあると無いで大違い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
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
何ができるか
 ●   CUIでデータを扱う方法の延長
      ●   典型的な端末のファイル処理
           –    catでファイルをざっと閲覧、grepで行を抽出、
                sedで置換、sortでソート・・・

      ●   以下の機能をコマンドで付加する
           –    表計算
           –    リレーショナル演算
           –    その他便利機能(全角<->半角、四捨五入、カンマ打ち)


Mar. 16, 2012         Open Source Conference 2012 Tokyo/Spring   11
使ってみる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
使ってみる2 --- keta
 ●   列を揃える




          見づらい


                                                    見やすい
Mar. 16, 2012     Open Source Conference 2012 Tokyo/Spring   13
使ってみる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
使ってみる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
使ってみる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
使ってみる6 --- webシステム
 ●   bashCMS
      ●   USP友の会のブースで展示。ソース見せます。




                                      http://www.usptomonokai.jp/
Mar. 16, 2012       Open Source Conference 2012 Tokyo/Spring        17
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
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
Open usp Tukubaiの入手 ---その3
 ●   UECサイト(usp engineers' community)
      ●   https://uec.usp-lab.com




Mar. 16, 2012         Open Source Conference 2012 Tokyo/Spring   20
まとめ
 ●   コマンドあってのシェルスクリプト
      ●   コマンドを使わないと素敵ではない
 ●   Open usp Tukubaiは便利
      ●   端末・シェルスクリプトをどんどん便利にする試み
      ●   FreeBSD, GitHub, uecサイトで入手可能

 ●   Software Design 連載もお願いします(17日発売)
      ●   開眼シェルスクリプト
           –    第4回:表とグラフを描く――HTMLファイルの出力
            –
Mar. 16, 2012         Open Source Conference 2012 Tokyo/Spring   21

           –

More Related Content

PDF
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第1回
PDF
SPARQLとMashup環境 (年岡先生)
PPTX
SPARQLによるLODの検索@第4回LODとオントロジー勉強会-
PDF
120418 tokyo node5_lin_qonnodejs
PDF
汎用Web API“SPARQL”でオープンデータ検索
PDF
LOD連続講義 第5回「LODの作り方・使い方」
PDF
RDF/OWLの概要及びOSS実装、及び活用イメージについて
PDF
その ionice、ほんとに効いてますか?
SPARQLから入門するLinked Open Data(LOD)ハンズオン 第1回
SPARQLとMashup環境 (年岡先生)
SPARQLによるLODの検索@第4回LODとオントロジー勉強会-
120418 tokyo node5_lin_qonnodejs
汎用Web API“SPARQL”でオープンデータ検索
LOD連続講義 第5回「LODの作り方・使い方」
RDF/OWLの概要及びOSS実装、及び活用イメージについて
その ionice、ほんとに効いてますか?

Similar to OSC2012 Tokyo Spring, USP lab. presentation (20)

PDF
2012年4月22日 カーネル/VM探検隊
PDF
Linux女子部勉強会 2012年4月21日
PDF
OpenDocument interoperability test workshop
PDF
Nodeにしましょう
PDF
Nseg第32回勉強会
PDF
future-study on 2012.09.22 #metacon
PDF
OpenDocument interoperability test workshop after story
PPT
分散Key/Valueストア Kai 事例紹介
PDF
20120907 osc-lt-docja
PDF
Learn about ODF / ODFを見なおそう
PDF
Josug advent calender20121219
PDF
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
PPTX
東京電機大学 ポータルサイト UNIPAからの情報抽出と再利用
PDF
20120516 NetCommons GoogleMap
PDF
わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」
PDF
Node-RED TIPS:functionノード間で関数を共有する方法
PDF
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
KEY
福岡XFD導入記
PDF
2012年10月27日 Hbstudy#38
PDF
20120630 android ics in Yokohama
2012年4月22日 カーネル/VM探検隊
Linux女子部勉強会 2012年4月21日
OpenDocument interoperability test workshop
Nodeにしましょう
Nseg第32回勉強会
future-study on 2012.09.22 #metacon
OpenDocument interoperability test workshop after story
分散Key/Valueストア Kai 事例紹介
20120907 osc-lt-docja
Learn about ODF / ODFを見なおそう
Josug advent calender20121219
SAIS/SIGMOD参加報告 in SAIS/DWS2018報告会@Yahoo! JAPAN
東京電機大学 ポータルサイト UNIPAからの情報抽出と再利用
20120516 NetCommons GoogleMap
わんくま名古屋#25(20121201) LT:「開発体験テンプレートを使ったストアアプリの作成」
Node-RED TIPS:functionノード間で関数を共有する方法
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
福岡XFD導入記
2012年10月27日 Hbstudy#38
20120630 android ics in Yokohama
Ad

More from Ryuichi Ueda (20)

PPTX
第27回ロボティクスシンポジアスライド
PPTX
シェル・ワンライナー160本ノック
PPTX
日本ロボット学会第139回ロボット工学セミナー
PPTX
シェル芸勉強会と会場の話
PPTX
移動ロボットのナビゲーション
PPTX
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
PPTX
第45回シェル芸勉強会オープニングスライド
PPTX
bash(の変な使い方)update
PPTX
第41回シェル芸勉強会 午後オープニング
PPTX
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
PDF
20181113_子ども夢ロボット&トーク
PPTX
第37回シェル芸勉強会イントロ
PPTX
シェル芸勉強会にみる、コミュニティを通じたIT学習
PPTX
ROSチュートリアル ROBOMECH2018
PDF
poster of PFoE used in ICRA 2018
PPTX
Robot frontier lesson3 2018
PPTX
Robot frontier lesson2 2018
PPTX
Robot frontier lesson1 2018
PPTX
第34回シェル芸勉強会
PPTX
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
第27回ロボティクスシンポジアスライド
シェル・ワンライナー160本ノック
日本ロボット学会第139回ロボット工学セミナー
シェル芸勉強会と会場の話
移動ロボットのナビゲーション
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
第45回シェル芸勉強会オープニングスライド
bash(の変な使い方)update
第41回シェル芸勉強会 午後オープニング
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
20181113_子ども夢ロボット&トーク
第37回シェル芸勉強会イントロ
シェル芸勉強会にみる、コミュニティを通じたIT学習
ROSチュートリアル ROBOMECH2018
poster of PFoE used in ICRA 2018
Robot frontier lesson3 2018
Robot frontier lesson2 2018
Robot frontier lesson1 2018
第34回シェル芸勉強会
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
Ad

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 –