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

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

((<"スケジュール表・各回資料 (06/01)"|[Exp2012]スケジュール表・各回資料#06-2F01>))

{{toc}}

= 提出について

* 提出期限:06/15 12:00
* 修正期限:06/22 12:00

== レポートの作成方法

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

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

* 自宅, 学内から ITPASS サーバ (ika-itpass) にログインする場合,
  ((<[TEBIKI]SSHサーバへの公開鍵認証によるログイン>)) を参考にして下さい.
* シェルスクリプトを作って実行するだけなら学内の Mac でもできます.
* 507 号室にある自分の担当マシンは, 部屋の使用予定がない限り,
  許可なく使ってもらってもよいです. ゼミなどで使用している場合も, その場で許可をとってもらえば使用してかまいません.
  * 507 号室の使用予定は以下の予定表で確認できます.
    * ((<507 号室の予約表|URL:https://itpass.scitec.kobe-u.ac.jp/~bldg3/hiki/hiki.cgi?507%B9%E6%BC%BC%A4%CE%CD%BD%CC%F3%B4%C9%CD%FD>))
* 507 号室への入室にあたり事前に許可は不要ですが,
  鍵がかかっていて入れないことがあります. 希望者には鍵を貸し出しますので, TA にご一報ください.
* 部屋を使用するときには, 506 号室 もしくは 508 号室にいる人に一言断ってから使用してください. ((<[Exp2012]実習部屋(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実習レポート 6/1 出題分 (自分の氏名)」
  * 宛先
    * itpass のメーリングリスト
  * メール本文に必ず記入すること
    * 情報実験機番号
    * 氏名
    * レポートの URL


= 必須課題

== 問題 1 文献リストの整理スクリプト

=== 問題 1.A (必須)

文献リストは((<ここから|URL:https://itpass.scitec.kobe-u.ac.jp/~itpass/exp/fy2012/120601/report/list_a.txt>))取得できます.

「本のタイトル, 著者の名, 著者の性」が複数記入してあるリストがあります. リストの一番上に書いてある数字は文献の数です. これを, 本のタイトルについてアルファベット順に並べ, さらに「本のタイトル,著者の性, 著者の名の頭文字」の順に並び替えたリストを作成するスクリプトを作成してください.

* 例
「Books, Taro, Yamada」なら「Books, Yamada, T」にする.

* リスト内の文献名, 著者名等は全て架空のものです. 実在の人物・団体には一切関係ありません.

=== 問題 1.B (オプション)

オプション課題は必須ではありませんが, 余裕があれば是非挑戦してみてください.

文献リストは((<ここから|URL:https://itpass.scitec.kobe-u.ac.jp/~itpass/exp/fy2012/120601/report/list_b.txt>))取得できます.

先程とは内容の異なるリストがあります. このリストについても問題 1.A と同様に並び替えたリストを作成するスクリプトを作成してください. 問題 1.A のリストとは以下の点が異なるので注意してください.

* 文献の数がリスト内に記入されていません. 任意の文献数について実行できるようなスクリプトを作成してください.

* リスト内の著者名の先頭は大文字小文字混ざっていますが, 大文字に統一してください.

さらに余裕がある場合には, これがあったら便利だなと思うような機能を考えて実装してみてください. 自分でさらに乱雑な文献リストを作ってみてもかまいません.(ミドルネームのある著者を入れる, 複数の著者がいる文献を入れる, ...)

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

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

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

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

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

  実行例とは, スクリプトの作業記録です. 自分が実際にスクリプトを実行したときのコンソールをテキストファイルにコピーするなどしてください. 具体的には下記の実行例のようなものです.
* 生成された実行結果 result_1a.txt, result_1b.txt ページへのリンク
* 参考資料

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

=== 実行例

$ ./quiz1a.sh
読み込むリストのファイル名を入力してください.
list_a.txt
BIOS set up, Sato, K
Dennou Tutorials, Noda, S
How to install Linux, Takahashi, Y
Internet protocol, Kashimoto, K
Introduction to Linux, Seki, T
Network Computing & Internet Security, Kuroda, M
Role of CPU, Sakanobe, T
Security & Passward, Funahashi, D
Shell script, Kawai, Y
X Window System, Saeki, T
以上の内容でリストが生成されました.

=== 実行結果

* ((<生成された文献リスト|URL:https://itpass.scitec.kobe-u.ac.jp/~itpass/exp/fy2012/120601/report/result_1a.txt>))

== 問題 2 サーバーへのファイルアップロードスクリプト

=== 必須問題

ネットワークを介して, 二つのマシン間で安全にファイルのやり取りをするために 「scp」 というコマンドがあります.
このコマンドを使い, ローカルにあるディレクトリを ITPASS サーバーの指定ディレクトリ以下へコピーするようなシェルスクリプトを作ってください.
詳しい説明や使い方については各自で調べてください.

なお, 作成するスクリプトには下のような機能を持たせてください.
* 特に指定のない場合の転送元ディレクトリは ~/test とする.
* 特に指定のない場合の転送先ディレクトリは
  itpass.scitec.kobe-u.ac.jp:~/test
  とする.
* 転送前に, 以下の点について確認メッセージを表示する.
  * 転送されるディレクトリの中身(ファイル・ディレクトリリスト).
  * スクリプト内で最終的に実行される scp コマンド(オプション・引数も含める).
* 上記の確認メッセージ表示後に, 転送を本当に実行するか選択できる.
* 引数の指定に応じて, 下のようにスクリプトの動作を変える(詳しくは実行例を参照してください).
  * 転送されるディレクトリの内容と, 転送するか否かの選択要求を表示しないようにすることができる.
  * 転送元, 転送先ディレクトリを変更できる.

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

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

  上記で作成した quiz2.sh を quiz2.sh.txt という名前に変更してください. ブラウザ上から読めるようにするためです.

* シェルスクリプトの解説

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

* スクリプトの使い方の解説

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

* 実行例 quiz2.txt へのリンク

  実行例とは, スクリプトの作業記録です. 自分が実際にスクリプトを実行したときのコンソールをテキストファイルにコピーするなどしてください. 具体的には下記の実行例のようなものです. 引数の取り方によって 4 種類の実行例が出ると思いますが, 一つのファイルにまとめて書いてください.

* 参考資料

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

=== 実行例

* 引数なし: 確認メッセージあり, 転送元・先ディレクトリは指定なし

    $ ./quiz2.sh
    転送されるファイルは以下の通りです
    /home/hoge/test:
    合計 0
    -rw-r--r-- 1 hoge hoge    0 2012-05-18 05:13 testtest.txt
    
    実行されるコマンドは以下の通りです
    scp -r /home/hoge/test hoge@itpass.scitec.kobe-u.ac.jp:/home/hoge/test

    実行してよろしいですか? [y/n]
    y
    hoge@itpass.scitec.kobe-u.ac.jp's password:
    testtest.txt                                                  100%    0       0.0KB/s   00:00

* 引数一つ: 確認メッセージなし, 転送元・先ディレクトリは指定なし
    $ quiz2.sh -s
    hoge@133.30.109.22's password:
    testtest.txt                                                  100%    0       0.0KB/s   00:00
* 引数二つ: 確認メッセージあり, 転送元・先ディレクトリは引数で指定
    $ quiz2.sh /home/hoge/from /home/hoge/to
    転送されるファイルは以下の通りです
    /home/hoge/from:
    合計 0
    -rw-r--r-- 1 hoge hoge    0 2012-05-18 05:13 fromfrom.txt
    
    実行されるコマンドは以下の通りです
    scp -r /home/hoge/from hoge@133.30.109.22:/home/hoge/to

    実行してよろしいですか? [y/n]
    y
    hoge@itpass.scitec.kobe-u.ac.jp's password:
    fromfrom.txt                                                  100%    0       0.0KB/s   00:00
* 引数三つ: 確認メッセージなし, 転送元・先ディレクトリは引数で指定
    $ quiz2.sh -s /home/hoge/from /home/hoge/to
    hoge@itpass.scitec.kobe-u.ac.jp's password:
    fromfrom.txt                                                  100%    0       0.0KB/s   00:00

#=== ヒント


=== オプション問題

下から選んでください. 複数実装しても構いません

* 転送元・先ディレクトリの片方だけでも指定できるようにする
  * 上の実行例のように, 引数の数で動作を決める方法は使えなくなります
    そのあたりも実装し直してください
  * 例 (転送先のみ変更した場合)
      $ quiz2.sh -s of=/home/hoge/to

* 転送元ディレクトリを, 暗号化された圧縮ファイルに固めてから転送できるようにする
#  * zip コマンド等
  * また, 転送先の圧縮ファイル名には転送日時を入れること
    * 例: 2012-05-23-10-22-50_to.gz
* 引数での転送先ディレクトリの指定について, IP アドレスやユーザ名も指定できるようにする
  * 例
      $ quiz2.sh -s /home/hoge/from hoge@tako-itpass.scitec.kobe-u.ac.jp:/home/hoge/to

#* 確認メッセージに, 転送するディレクトリのサイズも表示する
#* 一部拡張子ファイルのみ転送, もしくは一部拡張子ファイルを除外して転送
#  * ファイル名でも?
#* 転送するディレクトリの存在確認は必要か

= 提出されたレポート

* joho01
  * ((<中村 俊介|URL:/~itpass/exp/fy2012/120601/report/answers_final/ns2pole/>))
* joho02
  * ((<青山 大秀|URL:/~itpass/exp/fy2012/120601/report/answers_final/mtblue/>))
* joho04
  * ((<高野 暁宏|URL:/~itpass/exp/fy2012/120601/report/answers_final/tknak114/>))
* joho05
  * ((<高野 翔太|URL:/~itpass/exp/fy2012/120601/report/answers_final/stakano/>))
* joho07
  * ((<武林 仁樹|URL:/~itpass/exp/fy2012/120601/report/answers_final/takeba13/>))
* joho08
  * ((<津村 昂甫|URL:/~itpass/exp/fy2012/120601/report/answers_final/ktsumura/>))
* joho10
  * ((<寺岡 拓也|URL:/~itpass/exp/fy2012/120601/report/answers_final/tteraoka/>))
* joho11
  * ((<馬殿 彩奈|URL:/~itpass/exp/fy2012/120601/report/answers_final/badenden/>))
* joho13
  * ((<松尾 美希|URL:/~itpass/exp/fy2012/120601/report/answers_final/mikithim/>))