IT pass HikiWiki - [Exp2017]シェルスクリプト課題 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

{{toc}}

= 提出について

* 提出期限: 09/07 (木) 23:59
* 修正期限: 09/15 (金) 17:00

== レポートの作成方法

* ((<ITPASS サーバでレポートを公開するには|[Exp2017]ITPASS サーバでレポートを公開するには>)) を参照してください. また, ((<簡単なレポートの書き方指南>)) も良く読みましょう.
* レポートの一番上に以下のことを必ず明記してください.
  * タイトル (例: ITPASS 実習レポート1)
  * 名前
    * 学籍番号は書かないでください.
  * 担当情報実験機名 (例: joho01)
* レポートの HTML ファイルの名前は index.html にしてください.
  複数の HTML ファイルを作る場合は, 以下の要件を満たすようにしてください.
  * index.html を表紙, 目次とする
  * どの HTML ファイルも index.html との相互リンクが張ってある
* ((<レポートのテンプレート|URL:/~itpass/exp/fy2017/170811/practice_kadai/hiki-samples/sample.html>))  を置いてあります. 自由に使ってもらってかまいません.
* HTML の書き方については実習の時間内では解説しません.
  Web や書籍などで書き方を調べてください.
  上記のテンプレートを参照するのもよいでしょう.
  これもレポートの一環としてがんばってください.
* 問題の難易度を高めに設定しています.
  解けない場合は, 未完成のスクリプトを提出し,
  どこまでできて, 何につまづいたかを詳しく解説してください.
  問題そのものができていなくても,
  きちんとした解説があるレポートには高い評価を与えます.
* 自力で頑張っても分からない場合は, 他の人が提出したレポート
  (実習のメーリングリストに投げられたレポート提出報告メールに
  書かれている (はずの) URL から見られます)
  を参考にすることを推奨します.
  その場合, 参考にしたレポートを参考資料に挙げるようにしてください.
  また, 丸写しにするのではなく, 自分なりの改良も加えましょう.
* ((<2009 年のレポート課題|[Exp2009]シェルスクリプト課題>)), ((<2010 年のレポート課題|[Exp2010]シェルスクリプト課題>)), ((<2011 年のレポート課題|[Exp2011]シェルスクリプト課題>)) , ((<2012 年のレポート課題|[Exp2012]シェルスクリプト課題>)) , ((<2013 年のレポート課題|[Exp2013]シェルスクリプト課題>)) , ((<2014 年のレポート課題|[Exp2014]シェルスクリプト課題>)) , ((<2015 年のレポート課題|[Exp2015]シェルスクリプト課題>)) , ((<2016 年のレポート課題|[Exp2016]シェルスクリプト課題>))も参考にしてみてください.

=== 授業時間外のレポート作成について

* 自宅, 学内から ITPASS サーバ (ika-itpass) にログインする場合,
  ((<[TEBIKI]SSHサーバへの公開鍵認証によるログイン>)) を参考にして下さい.
  * Windows からの接続については, ((<こちら|URL:https://itpass.scitec.kobe-u.ac.jp/hiki/hiki.cgi?%E8%A8%88%E7%AE%97%E6%A9%9F%E3%81%A8%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E6%89%8B%E5%BC%95%E9%9B%86>))の
    * [TEBIKI]Tera Term を用いた SSH サーバへのログイン
    * [TEBIKI]Xming を用いた X (ウィンドウ) の飛ばし方
    * [TEBIKI]ITPASS サーバへのファイル転送方法
    を参考にすると良いでしょう.
  * なお, 学外からは情報実験機 (johoXX-itpass) に直接ログインすることはできません. 学外からは itpass サーバ (itpass.scitec.kobe-u.ac.jp) にログインし, itpass サーバから情報実験機に ssh でログインしましょう.
* シェルスクリプトを作って実行するだけなら学内の Mac でもできます.
* 507 号室にある自分の担当マシンは, 部屋の使用予定がない限り,
  許可なく使ってもらってもよいです. ゼミなどで使用している場合も, その場で許可をとってもらえば使用してかまいません.
  * 507 号室の使用予定は以下の予定表で確認できます.
    * ((<507 号室の予約表|URL:https://itpass.scitec.kobe-u.ac.jp/~bldg3/hiki/hiki.cgi?507%E5%8F%B7%E5%AE%A4%E3%81%AE%E4%BA%88%E7%B4%84%E7%AE%A1%E7%90%86>))
* 507 号室への入室にあたり事前に許可は不要ですが,
  鍵がかかっていて入れないことがあります. 希望者には鍵を貸し出しますので, TA にご一報ください.
* 部屋を使用するときには, 506 号室 もしくは 508 号室にいる人に一言断ってから使用してください. ((<[Exp2017]実習部屋(507号室)の使い方>)) もよく読んでください.


==  レポートの提出方法

=== ファイルを置く

今回のレポートは全て
ITPASS サーバ (ika-itpass) の ~/public_html/report01/
以下に置いてください.
置き場所となるディレクトリは必要に応じて自分で作ってください.

情報実験機で作ったファイルを ITPASS サーバに転送するには scp というコマンドを使うとよいでしょう. 詳しくは man を見てください.
各ファイルの置き方は以下のようにしてください.

* html ファイルは ~/public_html/report01/ 以下に置く.
* シェルスクリプトは ~/public_html/report01/scripts/ 以下に置く.
* 結果として出力されたファイルは
  ~/public_html/report01/results/ 以下に置く.
* 注意: 問題として配布するデータファイルは置かなくても結構です.
  ただし, どこからどうやって入手したかはレポート本文に明記しておきましょう.

=== アップロード確認

ブラウザから全部のファイルにアクセスできるか確認してみましょう.
例えば, ITPASS サーバ (ika-itpass) では,
~/public_html/report01/index.html に対応する URL は

  http://itpass.scitec.kobe-u.ac.jp/~(自分のアカウント名)/report01/index.html

になります.

=== 提出完了の報告

提出期限までに以下のメールを送ってください.
内容を確認した後, 修正すべき点があればその旨を連絡します.
修正完了後, 再度メールで報告してください.
こちらから, レポート提出完了のメールが送られた時点で
レポートを提出したことになります.

* メールの内容
  * 件名
    * 「ITPASS実習レポート ??/?? 出題分 (自分の氏名)」
  * 宛先
    * itpass のメーリングリスト
  * メール本文に必ず記入すること
    * 情報実験機番号
    * 氏名
    * レポートの URL

= 必須課題

== 問題 1

=== 気象庁のデータを用いたスクリプト

2016年1月1日から2016年12月31日までの, 47 都道府県の県庁所在地で観測された気象データファイルがあります. このデータファイルは, 以下のようなディレクトリ構造になっています.

  /home/hoge/kadai1_data
      |
      | -- Akita.csv    ( 秋田県秋田市 のデータ )
      | -- Aomori.csv   ( 青森県青森市 のデータ )
      | -- Chiba.csv    ( 千葉県千葉市 のデータ )
      | -- ......

例えば, 兵庫県神戸市のデータファイルの各列には以下のように気象データが記述されています.

  ダウンロードした時刻:yyyy/mm/dd hh:nn:ss

  ,兵庫,兵庫,兵庫,兵庫,兵庫,兵庫,兵庫,兵庫,兵庫,兵庫,兵庫,兵庫,兵庫
  ,神戸,神戸,神戸,神戸,神戸,神戸,神戸,神戸,神戸,神戸,神戸,神戸,神戸
  年月日,降水量の合計(mm),降水量の合計(mm),降水量の合計(mm),降水量の合計(mm),最低気温(℃),最低気温(℃),最低気温(℃),最高気温(℃),最高気温(℃),最高気温(℃),平均気温(℃),平均気温(℃),平均気温(℃)
  ,,,,,,,,,,,,,
  ,,現象なし情報,品質情報,均質番号,,品質情報,均質番号,,品質情報,均質番号,,品質情報,均質番号

  <観測年月日1>, <降水量の合計>, <現象なし情報>, <品質情報>, <均質番号>, <最低気温>, <品質情報>, <均質番号>, <最高気温>, <品質情報>, <均質番号>, <平均気温>, <品質情報>, <均質番号>
  <観測年月日2>, <降水量の合計>, <現象なし情報>, <品質情報>, <均質番号>, <最低気温>, <品質情報>, <均質番号>, <最高気温>, <品質情報>, <均質番号>, <平均気温>, <品質情報>, <均質番号>
  ......

ただし, csv ファイルごとに気象データの順番が異なるので注意してください.

csv ファイルに関する詳細は((<こちら|URL:http://www.data.jma.go.jp/gmd/risk/obsdl/top/help3.html>))

これらのファイルに収められている日平均温度を使って, 47 都道府県の県庁所在地にそれぞれにおける年平均温度を求め, それを高い順に 1 番目から 10 番目までの都道府県名を表示するスクリプトを作成してください.

==== 事前準備


スクリプトを作成する前に, ITPASSサーバ上のデータファイルを自分のホームディレクトリに持ってきてください.

次のコマンドをITPASSサーバで実行します.

cp /home/itpass/dc-arch/exp/fy2017/170811/practice_kadai/kadai1_data.tar.gz /home/hoge/

自分が使用している情報実験機にデータをコピーしてください.
cd ~hoge                                                      
scp  ./kadai1_data.tar.gz hoge@133.30.109.??:~        
?? には, 自分が使用している情報実験機のIPアドレスを入力してください.

次のコマンドを情報実験機で実行します.

気象データは圧縮ファイルにまとめられています. tar コマンドを用いて圧縮ファイルを展開してください.

cd ~hoge
tar xvzf ./kadai1_data.tar.gz


==== レポートに書く内容

レポート内には以下を記述してください.
ただしリンクを貼る際は((*相対パスで指定するようにしてください*)).
* シェルスクリプトファイル quiz1.sh.txt へのリンク

  上記で作成した quiz1.sh を quiz1.sh.txt という名前に変更してください. ブラウザ上から読めるようにするためです.
* シェルスクリプトの解説

  スクリプト内の各行が何をしているのか, ((*スクリプト内にコメント文として書く*)).
* スクリプトの使い方の解説

  これをもとに TA が実際にテストします. 
  実行する際のスクリプト, データの置き場を明示すること.
* 実行例 result_1.txt へのリンク

  実行例とは, スクリプトの作業記録です. 自分が実際にスクリプトを実行したときのコンソールをテキストファイルにコピーするなどしてください.

* 参考資料

  URL をベタ書きにするのではなく, そのページの作者やタイトル, および何を参考にしたのかも明記する.
* 共同作業した人の名前
* 工夫したこと, 感想など

=== 実行結果の例

$ ./quiz1.sh
沖縄
鹿児島
宮崎
高知
長崎
福岡
熊本
佐賀
兵庫
和歌山

余裕のある人は, 各都道府県の年平均気温や順位を表示させてみましょう.

$ ./quiz1.sh
1位 沖縄 24.13℃
2位 鹿児島 19.65℃
3位 宮崎 18.59℃
4位 高知 18.14℃
5位 長崎 18.12℃
6位 福岡 18.09℃
7位 熊本 18.00℃
8位 佐賀 17.87℃
9位 兵庫 17.84℃
10位 和歌山 17.76℃

なお, 本課題に使用するデータは, ((<気象庁のHP"過去の気象データ"|URL:http://www.data.jma.go.jp/obd/stats/etrn/index.php>))をもとに作成しました.

== 問題 2

=== 暗号解読スクリプト

今, 文字列 "ahvcee" は, アフィン暗号を用いて暗号化されています(暗号鍵はα=3, β=2).

各自, 暗号鍵を用いて文字列 "ahvcee" を復号した6文字を表示するスクリプトを作成してください.


アフィン暗号とは, 以下の手順で暗号化することを言います.
* アルファベットを数字へ変換
* "a"=>0, "b"=>1, ...., "z"=>25
* その数γ(0-25)を以下の式で変換

F(γ)=(α*γ+β)mod 26

* α, βは暗号化の鍵であり, γとF(γ)が1対1で対応付けられるために, αと26は互いに素になるように選びます.
* mod 26 は 26 で割った余りを表します.
* 得られた数字F(γ)をアルファベットに変換
* 0=>"a", 1=>"b", ...., 25=>"z"

例えば, α=3, β=2 のとき,

hは数字へ変換すると7であり, F(7)=(3*7+2)mod 26=23 => x
sは数字へ変換すると18であり, F(18)=(3*18+2)mod 26=4 => e

と暗号化することができます.

また, 暗号化されたF(γ)からγを導くことを復号といいます.


==== ヒント

* アフィン暗号の復号は少し難しいため, 以下に復号の方法を示す. 以下の復号はあくまで一例であり, 工夫すれば以下のヒントを用いなくても解くことができます. 課題 2 を解く際, 詰まってしまった場合参考にして下さい.
* ((<"シェルスクリプト課題問題 2 のヒント"|[Exp2017]シェルスクリプト課題問題 2 のヒント>))

==== レポートに書く内容

レポート内には以下を記述してください.
ただしリンクを貼る際は((*相対パスで指定するようにしてください*)).
* シェルスクリプトファイル quiz2.sh.txt へのリンク
  上記で作成した quiz2.sh を quiz2.sh.txt という名前に変更してください. ブラウザ上から読めるようにするためです.
* シェルスクリプトの解説

  スクリプト内の各行が何をしているのか, ((*スクリプト内にコメント文として書く*)).
* スクリプトの使い方の解説

  これをもとに TA が実際にテストします. 
  実行する際のスクリプト, データの置き場を明示すること.

* 実行結果 result_2.txt ページへのリンク
  
  実行例とは, スクリプトの作業記録です. 自分が実際にスクリプトを実行したときのコンソールをテキストファイル result_2.txt にコピーしてください.

* 参考資料

  URL をベタ書きにするのではなく, そのページの作者やタイトル, および何を参考にしたのかも明記する.
* 共同作業した人の名前
* 工夫したこと, 感想など

=== 実行結果の例

$ ./quiz2.sh
a=?
3
b=?
2
F(z)=?
ahvcee
z=itpass

= 提出されたレポート

* joho 01
   * ((<大谷 亮仁|URL:/~itpass/exp/fy2017/170811/kadai_answer/answers_final_190830/aki1001/>))
* joho 02
   * ((<香川 大輔|URL: http://itpass.scitec.kobe-u.ac.jp/~dai19k/report01/index.html>))|URL:/~itpass/exp/fy2017/170811/kadai_answer/answers_final_190830/dai19k/>))
* joho 04
   * ((<北窪 雛|URL:  http://itpass.scitec.kobe-u.ac.jp/~kitakubo/report01/index.html>))|URL:/~itpass/exp/fy2017/170811/kadai_answer/answers_final_190830/kitakubo/>))
* joho 05
   * ((<白濵 理花|URL: http://itpass.scitec.kobe-u.ac.jp/~shiraham/report01/index.html>))|URL:/~itpass/exp/fy2017/170811/kadai_answer/answers_final_190830/shiraham/>))
* joho 07
   * ((<手柴 佐和子|URL: http://itpass.scitec.kobe-u.ac.jp/~teshiba/report01/index.html>))|URL:/~itpass/exp/fy2017/170811/kadai_answer/answers_final_190830/teshiba/>))
* joho 08
   * ((<松岡 友輝|URL: http://itpass.scitec.kobe-u.ac.jp/~matsuoka/report01/index.html>))|URL:/~itpass/exp/fy2017/170811/kadai_answer/answers_final_190830/matsuoka/>))
* joho 10
   * ((<山口 寛登|URL: http://itpass.scitec.kobe-u.ac.jp/~hiroto/report01/index.html>))|URL:/~itpass/exp/fy2017/170811/kadai_answer/answers_final_190830/hiroto/>))
* joho 11
   * ((<横田 優作|URL: http://itpass.scitec.kobe-u.ac.jp/~yokota/report01/index.html>))|URL:/~itpass/exp/fy2017/170811/kadai_answer/answers_final_190830/yokota/>))