Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」

16,526 views

Published on

シェルスクリプトワークショップ資料です。

Published in: Engineering
  • Login to see the comments

シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」

  1. 1. http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 1 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 jus 勉強会 シェルスクリプトワークショップ 「シェル芸」を極める 日本 GNU AWK ユーザー会 斉藤 博文
  2. 2. http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 2 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 はじめに
  3. 3. 自己紹介  「日本 GNU AWK ユーザー会」会長  http://gauc.no-ip.org/awk-users-jp/  hi_saito@yk.rim.or.jp  @hi_saito  USP Magazine, Codezine に連載中 http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 3 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 2 日間、よろしくお願いします
  4. 4. 勉強会で重要なこと  質問しよう  積極的に質問をしてください  振り返ろう  手を動かして実際に試そう  大したことないことを分かろう  自分もいつかは講師をしよう http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 4 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 特に難しいことは話しません
  5. 5. 他の講義とダブる?  それは基本だからです  それは重要だからです  それは間違えやすいからです http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 5 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 単に整合が取れていない言い訳かもしれません
  6. 6. http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 6 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 シェル芸
  7. 7. シェル芸とは?  シェル芸とは、現代においてもっとも過激と 目される CLI ワンライナー原理主義の一派。 武田久美子を教祖とし、夏になると信者は女 も男も老いも若きも貝がらビキニで海辺を ホーミタイする危険な思想である。  アンサイクロペディア http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 7 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 ネタが古くて 30 代後半でないと分からない上、違います!
  8. 8. シェル芸とは?  マウスも使わず、ソースコードも残さず、GUI ツールを立ち上げる間もなく、あらゆる調 査・計算・テキスト処理を CLI 端末へのコマ ンド入力一撃で終わらすこと。  シェル芸の定義バージョン 1.0 http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 8 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 「USP 友の会」の上田会長の定義です
  9. 9. http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 9 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 今回のテーマ
  10. 10. 今回のテーマはファイル  ファイルを拡張子で判断しない  file コマンドが便利です  ファイルのコピーや移動はどうすれば良いか  実行前に確認できるようにする  ファイルから必要な部分だけを抜き出す  HTML, XML の扱いはどうすれば良いか http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 10 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 今までのシェル芸勉強会にないネタです
  11. 11. 重要なこと  できなくても構いません  得意、不得意があります  答えが違っても構いません  TIMTOWTDI の精神でやりましょう  手を動かしてください  頭ではなく手を動かしてください http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 11 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 頭もフル活用してください
  12. 12. 最初に  以下のファイルを落としてください  http://gauc.no-ip.org/~hi_saito/jus/jus_sample.tar.gz http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 12 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 できれば、CLI でお願いします $ mkdir jus $ cd !$ $ wget http://gauc.no-ip.org/~hi_saito/jus/jus_sample.tar.gz $ tar xzvf jus_sample.tar.gz List: CLI での落とし方
  13. 13. 問題のツリー http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 13 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 できれば、CLI でお願いします jus_sample/ +--- all/ | +--- test_01.jpg | +--- test_02.jpg | +--- test_01.png | +--- test_02.png | +--- test_01.txt | +--- test_02.txt | +--- test_01.html | +--- test_02.html +--- images/ +--- text/ +--- thumbnail/ List: 問題のディレクトリ構造 確認してください
  14. 14. http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 14 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 問題 (6 問あります)
  15. 15. 問題 1  画像ファイルだけを images/ ディレクトリに 移動してください  拡張子だけで判断しないでください http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 15 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学
  16. 16. 解答例 1 http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 16 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 $ find -type f | xargs file | grep 'image' | awk -F':' '{print $1, $1}' | awk '{sub(/all/, "images", $2); print $0}' | awk '{print "mv " $0}' | sh List: 解答例 1  xargs コマンドの使い方を知ろう  file コマンドでファイル種類を判別  確認後に最後に Shell に渡して実行 Demo
  17. 17. 問題 2  テキストファイルだけを text/ ディレクトリ にコピーしてください  拡張子だけで判断しないでください http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 17 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学
  18. 18. 解答例 2 http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 18 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 $ find -type f | xargs file | grep 'text' | awk -F':' '{print $1, $1}' | awk '{sub(/all/, "text", $2); print $0}' | awk '{print "cp " $0}' | sh List: 解答例 2  xargs コマンドの使い方を知ろう  file コマンドでファイル種類を判別  確認後に最後に Shell に渡して実行 Demo
  19. 19. 問題 3  画像を 32 x 32 ピクセル PNG 形式に変換して thumbnail/ ディレクトリに作成してくださ い  拡張子だけで判断しないでください http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 19 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学
  20. 20. 解答例 3 http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 20 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 $ find images/ -type f | awk '{print $1, $1}' | sed 's: images: thumbnail:' | sed 's:^:convert -geometry 32x32! :' | sed 's:$:.png:' | sh List: 解答例 3  sed の区切りは "/" ではなく、":" が便利  確認後に最後に Shell に渡して実行 Demo
  21. 21. 問題 4  test_01.html, test_02.html のタイトルを 抜き出してください  改行の有無をどうするかがポイントです http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 21 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学
  22. 22. 解答例 4 http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 22 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 $ find text/ -type f | xargs file | grep 'HTML' | awk -F':' '{print $1}' | xargs -n 1 cat | tr -d 'n' | grep -Eoi '<title>[^<]+</title>' | sed -r 's:</?[^>]+>::g' List: 解答例 4  XML, HTML は一旦改行を正しく付け直す  sed の区切りは "/" ではなく、":" が便利 Demo
  23. 23. 問題 5  test_01.html, test_02.html の HTML タ グを削除してください  改行の有無をどうするかがポイントです http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 23 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学
  24. 24. 解答例 5 http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 24 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 $ find text/ -type f | xargs file | grep 'HTML' | awk -F':' '{print $1}' | xargs sed -r 's:</?[^>]+>::g' | awk 'NF' List: 解答例 5  sed での最小一致を学ぼう  sed の区切りは "/" ではなく、":" が便利  余計な改行は AWK で削除 Demo
  25. 25. 問題 6  できあがった階層構造をツリー表示してくだ さい  tree コマンドは使用禁止です http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 25 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学
  26. 26. 解答例 6 http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 26 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 $ find | sort | tr '/' ' ' | sed -r 's:[^ ]+[ ]: +--- :g' | sed -r 's:--- : :g' | sed -r 's:[ ]+[ ]: | :g' List: 解答例 6  sed は GNU 拡張が便利 Demo
  27. 27. 問題 X  以下の住所を横書きで TTF 化してください  鳥取県鳥取市,若葉台北1-1-1,鳥取環境大学  いわゆる宛名書きです http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 27 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学
  28. 28. 解答例 X http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 28 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 $ echo '鳥取県鳥取市,若葉台北1-1-1,鳥取環境 大学' | sed 's:$:様:' | tr ',' 'n' | convert -pointsize 40 -font aoyagikouzanfont2.ttf label:@- jusyo.png List: 解答例 X  覚える必要はありません。 Demo
  29. 29. 問題 XX  以下の住所を縦書きで TTF 化してください  鳥取県鳥取市,若葉台北1-1-1,鳥取環境大学  いわゆる宛名書きです http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 29 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学
  30. 30. 解答例 XX http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 30 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 $ echo '鳥取県鳥取市,若葉台北1-1-1,鳥取環境 大学' | sed 's:$:様:' | tr ',' 'n' | tac | xargs -n1 -I% sh -c ' echo "%" | grep -o '.' | convert -pointsize 40 -font sazanami-mincho.ttf label:@- miff:-' | convert - +append jusyo.png List: 解答例 XX  覚える必要はありません。 Demo
  31. 31. http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 31 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 質問はありますか?
  32. 32. http://gauc.no-ip.org/awk-users-jp/日本 GNU AWK ユーザー会 斉藤 @hi_saito - 32 - 2014 年 12 月 13, 14 日 シェルスクリプトワークショップ @鳥取環境大学 ご清聴ありがとうございました

×