ITPASS 実習レポート 1

名前 山口 寛登

担当情報実験機 joho10

問 1

スクリプトの URL

quiz1.sh.txt

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

まずはこのスクリプトを任意のディレクトリーにコピーし、ファイル名をquiz1.shと変えてください。そして、chmodで実行権限をこのスクリプトに与えてください。

次にitpassサーバ上のkadai1_data.tar.gzを同じディレクトリにコピーしてきてください。
解凍まで行っておいてください

次にスクリプトを実行してください。

実行結果が出力されると思います。

tempというフォルダーを作り、その中で実行。実行後にtempファイルを削除します。ディレクトリ内にtempという名前のファイルが無いかどうか確かめておいてください。

実行結果へのリンク

問1の実行例

参考資料

LINUX.JUST4FUN.BIZ
逆引きシェルスクリプトを中心に、コマンド全般の使い方等を知るために利用。

エンジニアの入り口
カッコの挙動・パイプなどについてわかりやすい解説があり理解のため利用した。

ITPRO 日経コンピューター Linuxコマンド集 INDEX
コマンド全般の使い方を調べるために利用。

sed & awkプログラミング Dale Dougherty, Arnold Robbins共著 ; 福崎俊博訳
awkコマンドが便利そうだったためawkコマンドでできることを調べようと利用。

工夫したこと, 感想

気象庁データの適切な数値を抜き出すのに苦労した。応用性を持たせるために地点名を指定してそれぞれの処理をさせるという方法を取らないようにした。列ごとにファイル化したうえでgrepコマンドを利用し適切な扱いたいデータを取り出せるようにした。

このやり方の欠点はファイル数が多くなるため処理速度が落ちてしまうことである。一応少しでも早くするために、検索から除外されたファイルはその都度削除するようにしたが工夫の余地があるように思う。

工夫点としては、後から別の人が処理を付け足したいと思ったときにやりやすいようにしようとした。ファイルを連番化するときも見やすさを重視して(条件分岐が必要になるが)常に2桁(01・02・・・)とした。また、最後の削除過程を#でコメントアウトすれば、途中の処理が段階ごとにファイル化されているのできっと見やすい(最後に手動で削除しないと一部エラーを吐き出すが)。

全体的に汎用性を考える努力をした。

修正点

grepコマンドを繋げられることをコマンド集で見つけたため繋げた。変数SECONDSを用いて時間測定をしたところ、修正前は10回平均2.4秒、修正後は2.2秒となった。ただし、条件によるとも考えられる。より簡潔になった。

問 2

スクリプトの URL

quiz2.sh.txt

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

まず、このスクリプトを任意のディレクトリーにコピーしファイル名をquiz2.shに変更してください。そして、実行権限を与えてください。

スクリプトを実行してください。まず「鍵1」の入力を行います。「鍵1の指定を数字で行ってください」の後に数字を打ち込みます。エンターを押してください。

鍵1は26と互いに素であるので、26と素でなければ鍵1を指定できません。繰り返して入力できます。

「鍵2」の入力を行います。「鍵2の指定を数字で行ってください」の後に数字を打ち込みます。エンターを押してください。

復号したい文字を入力します。エンターを押してください。

復号された文字が出力されます

注意としては鍵には数字以外を打ち込まないでください。小数点もやめてください。整数であれば基本的に動きます。復号したい文字には小文字のアルファベットのみ入力してください。

実行結果へのリンク

問2の実行例

参考資料

Axoluder`s blog
更新も古いブログであるが、他と比べるとアフィン暗号についてわかりやすいと感じる解説がなされている。ブログということもあり、参考程度に利用した。

UNIX&Linux コマンド・シェルスクリプト リファレンス
様々なコマンドの利用方法について調べるために利用した。

工夫したこと, 感想

まず、鍵として利用する数字について考えた。鍵1に当たる方はmod26で逆数をとる。そのため鍵1が26と互いに素でなければ逆数が取れずエラーとなってしまう。そのため、鍵1を読み込んだ時点で26と互いに素かを判別するようにした。また、マイナスのときも同様に計算過程でエラーを引き起こす原因となるので弾くようにしている。

文字を数字に、数字を文字にというプロセスがあるが、これは配列を利用して解決した。

並べて入力された文字を一文字ずつ分けて処理できるようにする部分。それから、1文字ずつ処理するためのwhileのループ部分は参考資料を見つつかなりの試行錯誤をした部分である。