IT pass HikiWiki - [Exp2008]シェルスクリプト課題 Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
((<"スケジュール表・各回資料 (05/09)"|[Exp2008]スケジュール表・各回資料#05-2F09>))
{{toc}}
= 提出について
* 提出期限: 5/15 (木)
* 修正期限: 5/22 (木)
== レポートの作成方法
* ((<EPA サーバでレポートを公開するには|[Exp2008]EPA サーバでレポートを公開するには>)) を参照してください. また, ((<簡単なレポートの書き方指南>)) も良く読みましょう.
* レポートの HTML ファイルの名前は index.html にしてください.
複数の HTML ファイルを作る場合は, 以下の要件を満たすようにしてください.
* index.html を表紙, 目次とする
* どの HTML ファイルも index.html との相互リンクが張ってある
* ((<レポートのテンプレート|URL:/~itpass/exp/fy2008/080509/practice/hiki-samples/index.html>)) を置いてあります. 自由に使ってもらってかまいません.
* HTML の書き方については実習の時間内では解説しません.
Web や書籍などで書き方を調べてください.
上記のテンプレートを参照するのもよいでしょう.
これもレポートの一環としてがんばってください.
* 問題の難易度を高めに設定しています.
解けない場合は, 未完成のスクリプトを提出し,
どこまでできて, 何につまづいたかを詳しく解説してください.
問題そのものができていなくても,
きちんとした解説があるレポートには高い評価を与えます.
* 自力で頑張っても分からない場合は, 他の人が提出したレポート
(実習のメーリングリストに投げられたレポート提出報告メールに
書かれている (はずの) URL から見られます)
を参考にすることを推奨します.
その場合, 参考にしたレポートを参考資料に挙げるようにしてください.
また, 丸写しにするのではなく, 自分なりの改良も加えましょう.
=== 授業時間外のレポート作成について
* 自宅, 学内から EPA サーバ (ika) にログインする場合,
((<[TEBIKI]SSHサーバへの公開鍵認証によるログイン>)) を参考にして下さい.
* シェルスクリプトを作って実行するだけなら学内の Mac でもできます.
* 基本的に, 研究室にある自分の担当マシンは 24 時間
いつでも許可なく使ってもらってもよいです.
研究室への入室にも許可は不要ですが,
鍵がかかっていて入れないことがあります.
作業時間などを確実に確保したい場合は
早めに TA にアポイントをとっておきましょう.
== レポートの提出方法
=== ファイルを置く
今回のレポートは全て
EPA サーバ (ika) の ~/public_html/report01/
以下に置いてください.
置き場所となるディレクトリは必要に応じて自分で作ってください.
情報実験機で作ったファイルを EPA サーバに転送するには scp というコマンドを使うとよいでしょう. 詳しくは man を見てください.
* html ファイルは ~/public_html/report01/ 以下に置く.
* シェルスクリプトは ~/public_html/report01/scripts/ 以下に置く.
* 結果として出力されたファイルは
~/public_html/report01/results/ 以下に置く.
* 注意: 問題として配布するデータファイルは置かなくても結構です.
ただし, どこからどうやって入手したかはレポート本文に明記しておきましょう.
=== アップロード確認
ブラウザから全部のファイルにアクセスできるか確認してみましょう.
例えば, EPA サーバ (ika) では,
~/public_html/report01/index.html に対応する URL は
http://epa.scitec.kobe-u.ac.jp/~(自分のアカウント名)/report01/index.html
になります.
=== 提出完了の報告
提出期限までに以下のメールを送ってください.
内容を確認した後, 修正すべき点があればその旨を連絡します.
修正完了後, 再度メールで報告してください.
こちらから, レポート提出完了のメールが送られた時点で
レポートを提出したことになります.
* メールの内容
* 件名
* 「地球および惑星大気科学実習レポート 5/9 出題分 (自分の氏名)」
* 宛先
* itpass のメーリングリスト
* メール本文に必ず記入すること
* 情報実験機番号
* 氏名
* レポートの URL
= 課題
== 問 1
=== 問題文
以下のファイルをダウンロードしてください.
((<URL:/~itpass/exp/fy2008/080509/report/dat/dat.tar.gz>))
具体的には, 以下のコマンドでダウンロードできます.
$ wget http://epa.scitec.kobe-u.ac.jp/~itpass/exp/fy2008/080509/report/dat/dat.tar.gz
今いるディレクトリに dat.tar.gz というファイルが現れたはずです.
dat.tar.gz を tar コマンドなどで以下のように解凍します.
$ tar zxf dat.tar.gz
dat というディレクトリが現れ,
中に 001.dat から 100.dat という名前のファイルが 100 個置いてあります.
この中に, 全く同じ内容のファイルのペアがあります.
何組あるかは分かりません. ペアをなさないファイルもあります.
quiz1.sh という名前のシェルスクリプトを作成し,
内容が同じであるペアのファイル名を
quiz1.txt という名前のファイルに書き出すようにしてください.
出力する際の書式は以下の通りです.
一行にペアとなるファイル名を並べて出力してください.
ファイルとファイルの間は半角空白を1文字入れてください.
001.dat 003.dat
005.dat 009.dat
...
レポート内には以下を記述してください.
* 実習者氏名
* 担当情報実験機名 (例: joho01)
* シェルスクリプトファイル quiz1.sh.txt へのリンク.
(上記で作成した quiz1.sh を quiz1.sh.txt という名前に変更
してください. ブラウザ上から読めるようにするためです).
* シェルスクリプトの解説
* スクリプト内の各行が何をしているのか, スクリプト内にコメント文として書く
* スクリプトの使い方の解説
* これをもとに TA が実際にテストします
* 実行する際のスクリプト, データの置き場を明示すること
* 実行結果 quiz1.txt へのリンク
* 参考資料
* URL をベタ書きにするのではなく, そのページの作者やタイトルおよび,
何を参考にしたのかも明記する.
* 共同作業した人の名前
* コメント
* 本課題を回答するにあたって工夫したこと, 感想など
=== ヒント
* diff というコマンドで 2 つのファイルの違いを比較できます.
* wc というコマンドでファイルの大きさなどを調べることができます.
* 一般にシェルからコマンドを実行すると, コマンドは終了時にシェルに「終了ステータス(返り値)」を伝えます.
* 直前に終了したコマンドの終了ステータス(返り値)をシェル変数 $? で参照できます.
* スクリプトの内容によっては実行に時間がかかる (1 分くらい) ので,
最初は自分で 3 つくらいファイルを作って確認してみると待ち時間を短くできます.
=== 解答例
* ((<スクリプト|URL:/~itpass/exp/fy2008/080509/report/answer_scripts/quiz1.sh.txt>))
== 問 2
=== 問題文
引数に任意の正の整数 m, n (ただし m <= n) を与えたとき,
以下の条件を満たすシェルスクリプトを作ってください.
スクリプト名は quiz2.sh とし,
m=1, n=99 としたときの結果を quiz2.txt に出力してください.
(1) 任意の整数 m から 1 ずつ増やした数字を n まで出力する.
(2) 3 の倍数のときと, 3 の数字がつくときに, 数字の後に fool と出力する.
(3) さらに, 8 の倍数のときに comfortable と出力する.
レポート内には以下を記述してください.
* 実習者氏名
* 担当情報実験機名 (例: joho01)
* シェルスクリプトファイル quiz2.sh.txt へのリンク.
(上記で作成した quiz2.sh を quiz2.sh.txt という名前に変更
してください. ブラウザ上から読めるようにするためです).
* シェルスクリプトの解説
* スクリプト内の各行が何をしているのか, スクリプト内にコメント文として書く
* スクリプトの使い方の解説
* これをもとに TA が実際にテストします
* 実行する際のスクリプト, データの置き場を明示すること
* 実行結果 quiz2.txt へのリンク
* 参考資料
* URL をベタ書きにするのではなく, そのページの作者やタイトルおよび,
何を参考にしたのかも明記する.
* 共同作業した人の名前
* コメント
* 本課題を回答するにあたって工夫したこと, 感想など
=== 実行例
以下は引数に m=1, n=40 を与えた場合の実行例です.
$ ./quiz2.sh 1 40
$ cat quiz2.txt
1
2
3 fool
4
5
6 fool
7
8 comfortable
9 fool
10
11
12 fool
13 fool
14
15 fool
16 comfortable
17
18 fool
19
20
21 fool
22
23 fool
24 fool comfortable
25
26
27 fool
28
29
30 fool
31 fool
32 fool comfortable
33 fool
34 fool
35 fool
36 fool
37 fool
38 fool
39 fool
40 comfortable
=== ヒント
この問題はいろいろな解き方があります.
ヒントの内容を全部使おうとすると,
かえって解けなくなるかもしれません.
* 引数については ((<引数処理|[Exp2008]シェルスクリプト#引数処理>))
を参照してください.
* いきなり作るのが難しい場合は,
1 つめの条件のみを満たすスクリプトを作ってみて,
少しずつ条件を足していくと作りやすくなります.
#* seq というコマンドで数字の列が出力できます.
* 実習資料に ((<数字の1から9を表示する|[Exp2008]シェルスクリプト#数字の1から9を表示する>)) という例があります.
* expr というコマンドで整数の計算ができます.
* 「FizzBuzz問題」で web 検索すると類似の問題の考え方や回答例を
見ることができます.
(ただし, ほとんどの回答は他のプログラミング言語で書かれていると思います).
=== 解答例
* ((<スクリプト|URL:/~itpass/exp/fy2008/080509/report/answer_scripts/quiz2.sh.txt>))
== 提出されたレポート
* joho01
* ((<安 ヒョンソン|URL:/~itpass/exp/fy2008/080509/report/answers_080527/ahnhs/>))
* ((<石田 拓也|URL:/~itpass/exp/fy2008/080509/report/answers_080527/tishida/>))
* ((<井谷 優花|URL:/~itpass/exp/fy2008/080509/report/answers_080527/yukai/>))
* joho02
* ((<黒田 美紀|URL:/~itpass/exp/fy2008/080509/report/answers_080527/mikity/>))
* ((<合田 真美|URL:/~itpass/exp/fy2008/080509/report/answers_080527/mami/>))
* ((<佐々木 嗣幸|URL:/~itpass/exp/fy2008/080509/report/answers_080527/tuguyuki/>))
* joho03
* ((<下田 真基子|URL:/~itpass/exp/fy2008/080509/report/answers_080527/smakiko/>))
* ((<辻野 智紀|URL:/~itpass/exp/fy2008/080509/report/answers_080527/satoki/>))
* ((<東川 利恵|URL:/~itpass/exp/fy2008/080509/report/answers_080527/gahirie/>))
* joho04
* ((<藤木 裕也|URL:/~itpass/exp/fy2008/080509/report/answers_080527/yuuya/>))
* ((<山田 登太|URL:/~itpass/exp/fy2008/080509/report/answers_080527/tyamada/>))
((<"スケジュール表・各回資料 (05/09)"|[Exp2008]スケジュール表・各回資料#05-2F09>))
{{toc}}
= 提出について
* 提出期限: 5/15 (木)
* 修正期限: 5/22 (木)
== レポートの作成方法
* ((<EPA サーバでレポートを公開するには|[Exp2008]EPA サーバでレポートを公開するには>)) を参照してください. また, ((<簡単なレポートの書き方指南>)) も良く読みましょう.
* レポートの HTML ファイルの名前は index.html にしてください.
複数の HTML ファイルを作る場合は, 以下の要件を満たすようにしてください.
* index.html を表紙, 目次とする
* どの HTML ファイルも index.html との相互リンクが張ってある
* ((<レポートのテンプレート|URL:/~itpass/exp/fy2008/080509/practice/hiki-samples/index.html>)) を置いてあります. 自由に使ってもらってかまいません.
* HTML の書き方については実習の時間内では解説しません.
Web や書籍などで書き方を調べてください.
上記のテンプレートを参照するのもよいでしょう.
これもレポートの一環としてがんばってください.
* 問題の難易度を高めに設定しています.
解けない場合は, 未完成のスクリプトを提出し,
どこまでできて, 何につまづいたかを詳しく解説してください.
問題そのものができていなくても,
きちんとした解説があるレポートには高い評価を与えます.
* 自力で頑張っても分からない場合は, 他の人が提出したレポート
(実習のメーリングリストに投げられたレポート提出報告メールに
書かれている (はずの) URL から見られます)
を参考にすることを推奨します.
その場合, 参考にしたレポートを参考資料に挙げるようにしてください.
また, 丸写しにするのではなく, 自分なりの改良も加えましょう.
=== 授業時間外のレポート作成について
* 自宅, 学内から EPA サーバ (ika) にログインする場合,
((<[TEBIKI]SSHサーバへの公開鍵認証によるログイン>)) を参考にして下さい.
* シェルスクリプトを作って実行するだけなら学内の Mac でもできます.
* 基本的に, 研究室にある自分の担当マシンは 24 時間
いつでも許可なく使ってもらってもよいです.
研究室への入室にも許可は不要ですが,
鍵がかかっていて入れないことがあります.
作業時間などを確実に確保したい場合は
早めに TA にアポイントをとっておきましょう.
== レポートの提出方法
=== ファイルを置く
今回のレポートは全て
EPA サーバ (ika) の ~/public_html/report01/
以下に置いてください.
置き場所となるディレクトリは必要に応じて自分で作ってください.
情報実験機で作ったファイルを EPA サーバに転送するには scp というコマンドを使うとよいでしょう. 詳しくは man を見てください.
* html ファイルは ~/public_html/report01/ 以下に置く.
* シェルスクリプトは ~/public_html/report01/scripts/ 以下に置く.
* 結果として出力されたファイルは
~/public_html/report01/results/ 以下に置く.
* 注意: 問題として配布するデータファイルは置かなくても結構です.
ただし, どこからどうやって入手したかはレポート本文に明記しておきましょう.
=== アップロード確認
ブラウザから全部のファイルにアクセスできるか確認してみましょう.
例えば, EPA サーバ (ika) では,
~/public_html/report01/index.html に対応する URL は
http://epa.scitec.kobe-u.ac.jp/~(自分のアカウント名)/report01/index.html
になります.
=== 提出完了の報告
提出期限までに以下のメールを送ってください.
内容を確認した後, 修正すべき点があればその旨を連絡します.
修正完了後, 再度メールで報告してください.
こちらから, レポート提出完了のメールが送られた時点で
レポートを提出したことになります.
* メールの内容
* 件名
* 「地球および惑星大気科学実習レポート 5/9 出題分 (自分の氏名)」
* 宛先
* itpass のメーリングリスト
* メール本文に必ず記入すること
* 情報実験機番号
* 氏名
* レポートの URL
= 課題
== 問 1
=== 問題文
以下のファイルをダウンロードしてください.
((<URL:/~itpass/exp/fy2008/080509/report/dat/dat.tar.gz>))
具体的には, 以下のコマンドでダウンロードできます.
$ wget http://epa.scitec.kobe-u.ac.jp/~itpass/exp/fy2008/080509/report/dat/dat.tar.gz
今いるディレクトリに dat.tar.gz というファイルが現れたはずです.
dat.tar.gz を tar コマンドなどで以下のように解凍します.
$ tar zxf dat.tar.gz
dat というディレクトリが現れ,
中に 001.dat から 100.dat という名前のファイルが 100 個置いてあります.
この中に, 全く同じ内容のファイルのペアがあります.
何組あるかは分かりません. ペアをなさないファイルもあります.
quiz1.sh という名前のシェルスクリプトを作成し,
内容が同じであるペアのファイル名を
quiz1.txt という名前のファイルに書き出すようにしてください.
出力する際の書式は以下の通りです.
一行にペアとなるファイル名を並べて出力してください.
ファイルとファイルの間は半角空白を1文字入れてください.
001.dat 003.dat
005.dat 009.dat
...
レポート内には以下を記述してください.
* 実習者氏名
* 担当情報実験機名 (例: joho01)
* シェルスクリプトファイル quiz1.sh.txt へのリンク.
(上記で作成した quiz1.sh を quiz1.sh.txt という名前に変更
してください. ブラウザ上から読めるようにするためです).
* シェルスクリプトの解説
* スクリプト内の各行が何をしているのか, スクリプト内にコメント文として書く
* スクリプトの使い方の解説
* これをもとに TA が実際にテストします
* 実行する際のスクリプト, データの置き場を明示すること
* 実行結果 quiz1.txt へのリンク
* 参考資料
* URL をベタ書きにするのではなく, そのページの作者やタイトルおよび,
何を参考にしたのかも明記する.
* 共同作業した人の名前
* コメント
* 本課題を回答するにあたって工夫したこと, 感想など
=== ヒント
* diff というコマンドで 2 つのファイルの違いを比較できます.
* wc というコマンドでファイルの大きさなどを調べることができます.
* 一般にシェルからコマンドを実行すると, コマンドは終了時にシェルに「終了ステータス(返り値)」を伝えます.
* 直前に終了したコマンドの終了ステータス(返り値)をシェル変数 $? で参照できます.
* スクリプトの内容によっては実行に時間がかかる (1 分くらい) ので,
最初は自分で 3 つくらいファイルを作って確認してみると待ち時間を短くできます.
=== 解答例
* ((<スクリプト|URL:/~itpass/exp/fy2008/080509/report/answer_scripts/quiz1.sh.txt>))
== 問 2
=== 問題文
引数に任意の正の整数 m, n (ただし m <= n) を与えたとき,
以下の条件を満たすシェルスクリプトを作ってください.
スクリプト名は quiz2.sh とし,
m=1, n=99 としたときの結果を quiz2.txt に出力してください.
(1) 任意の整数 m から 1 ずつ増やした数字を n まで出力する.
(2) 3 の倍数のときと, 3 の数字がつくときに, 数字の後に fool と出力する.
(3) さらに, 8 の倍数のときに comfortable と出力する.
レポート内には以下を記述してください.
* 実習者氏名
* 担当情報実験機名 (例: joho01)
* シェルスクリプトファイル quiz2.sh.txt へのリンク.
(上記で作成した quiz2.sh を quiz2.sh.txt という名前に変更
してください. ブラウザ上から読めるようにするためです).
* シェルスクリプトの解説
* スクリプト内の各行が何をしているのか, スクリプト内にコメント文として書く
* スクリプトの使い方の解説
* これをもとに TA が実際にテストします
* 実行する際のスクリプト, データの置き場を明示すること
* 実行結果 quiz2.txt へのリンク
* 参考資料
* URL をベタ書きにするのではなく, そのページの作者やタイトルおよび,
何を参考にしたのかも明記する.
* 共同作業した人の名前
* コメント
* 本課題を回答するにあたって工夫したこと, 感想など
=== 実行例
以下は引数に m=1, n=40 を与えた場合の実行例です.
$ ./quiz2.sh 1 40
$ cat quiz2.txt
1
2
3 fool
4
5
6 fool
7
8 comfortable
9 fool
10
11
12 fool
13 fool
14
15 fool
16 comfortable
17
18 fool
19
20
21 fool
22
23 fool
24 fool comfortable
25
26
27 fool
28
29
30 fool
31 fool
32 fool comfortable
33 fool
34 fool
35 fool
36 fool
37 fool
38 fool
39 fool
40 comfortable
=== ヒント
この問題はいろいろな解き方があります.
ヒントの内容を全部使おうとすると,
かえって解けなくなるかもしれません.
* 引数については ((<引数処理|[Exp2008]シェルスクリプト#引数処理>))
を参照してください.
* いきなり作るのが難しい場合は,
1 つめの条件のみを満たすスクリプトを作ってみて,
少しずつ条件を足していくと作りやすくなります.
#* seq というコマンドで数字の列が出力できます.
* 実習資料に ((<数字の1から9を表示する|[Exp2008]シェルスクリプト#数字の1から9を表示する>)) という例があります.
* expr というコマンドで整数の計算ができます.
* 「FizzBuzz問題」で web 検索すると類似の問題の考え方や回答例を
見ることができます.
(ただし, ほとんどの回答は他のプログラミング言語で書かれていると思います).
=== 解答例
* ((<スクリプト|URL:/~itpass/exp/fy2008/080509/report/answer_scripts/quiz2.sh.txt>))
== 提出されたレポート
* joho01
* ((<安 ヒョンソン|URL:/~itpass/exp/fy2008/080509/report/answers_080527/ahnhs/>))
* ((<石田 拓也|URL:/~itpass/exp/fy2008/080509/report/answers_080527/tishida/>))
* ((<井谷 優花|URL:/~itpass/exp/fy2008/080509/report/answers_080527/yukai/>))
* joho02
* ((<黒田 美紀|URL:/~itpass/exp/fy2008/080509/report/answers_080527/mikity/>))
* ((<合田 真美|URL:/~itpass/exp/fy2008/080509/report/answers_080527/mami/>))
* ((<佐々木 嗣幸|URL:/~itpass/exp/fy2008/080509/report/answers_080527/tuguyuki/>))
* joho03
* ((<下田 真基子|URL:/~itpass/exp/fy2008/080509/report/answers_080527/smakiko/>))
* ((<辻野 智紀|URL:/~itpass/exp/fy2008/080509/report/answers_080527/satoki/>))
* ((<東川 利恵|URL:/~itpass/exp/fy2008/080509/report/answers_080527/gahirie/>))
* joho04
* ((<藤木 裕也|URL:/~itpass/exp/fy2008/080509/report/answers_080527/yuuya/>))
* ((<山田 登太|URL:/~itpass/exp/fy2008/080509/report/answers_080527/tyamada/>))
((<"スケジュール表・各回資料 (05/09)"|[Exp2008]スケジュール表・各回資料#05-2F09>))