名前 林 和輝
担当情報実験機 joho10
いわゆるシーザー暗号を解読するためのシェルです。
まずスクリプトファイルを任意のディレクトリにダウンロードします。
次にitpassサーバ内のkadai1-1_data.txt, kadai1-2_data.txt, kadai1-3_data.txtを、先のディレクトリと同様の場所にコピーします。
スクリプトファイルの拡張子を「.sh.txt」から「.sh」に変更し、実行権限を与えます。
「./quiz1.sh [調べるテキストファイル名]」と入力して実行します。この際、ファイル名にkadai1-1_data.txt、kadai1-2_data.txt、kadai1-3_data.txt以外を入力すると、「Error」と表示されます。
memo-off.blogspot.jp
http://memo-off.blogspot.jp/2012/11/bashn.htmhttp://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231163/
trコマンドの扱い方について参考にしました。
池田くんのレポート
http://itpass.scitec.kobe-u.ac.jp/~ikedaryo/report01/scripts/quiz1.sh.txt
見ていて、似たような方法でdoを使って回すことを思いつきました。
なし
trコマンドを見つければ、終わりまですぐでした。
同じようなコマンドを26回入力していたのですが、これをdo文を利用して、数行でまとめられました。
まずスクリプトファイルを任意のディレクトリにダウンロードします。
次にitpassサーバ内の気象データの圧縮ファイルkadai2_data.tar.gzを、先のものと同様のディレクトリにコピーし、gzファイルを展開します。
スクリプトファイルの拡張子を「.sh.txt」から「.sh」に変更し、実行権限を与えます。
「./quiz2.sh」入力すると、表示したいデータの入力を要求されるので、1、2、3のいずれかの数字を入力します。このとき1、2、3以外の文字を入力するとエラー文が表示されます。
竹野研究室
http://takeno.iee.niit.ac.jp/~shige/misc/script/awk1/node6.html
awk内でintを用いて値の整数部分を抽出する方法を参考にしました。
ソフトウェアエンジニアのためのtips
http://sweng.web.fc2.com/ja/program/bash/read-each-line.html
ファイルを行ごとに処理する方法を参考にしました。
zenpouの日記
http://d.hatena.ne.jp/zenpou/20081001/1222868503
forの適用範囲を値で指定する方法を参考にしました。
教えて!goo
http://oshiete.goo.ne.jp/qa/4766063.html
ファイルの行数を抽出する方法を参考にしました。
TA 岡崎正悟さん
デバッグの仕方についてアドバイスをいただきました。
本当は2つのdoループの組み合わせで綺麗にまとめたかったのですが、なぜかdoループの外に引数が引き継ぐことができないという現象が発生し、dの値を書き起こせないでいました。
これについてTAさんとも相談したものの、原因を突き止められなかったため、doループ内に条件を設けて、最後のデータを読み終わった時、ループ内でdの値を書き起こしてしまうような構造に、大きく書き換えました。
うるう年の場合(day=366)とそうでない場合(day=365)で書き起こすタイミングが変わるため、どうしたものかと思いましたが、その年の日数をawkで呼び出すという思いつきのおかげで、スッキリとはしないものの、なんとか書き上げることができました。
シェルを別のディレクトリに移動させなければ動かなかったのですが、内部でファイルの場所を指定する修正を加えたことによって、この手間を省きました。