ITPASS 実習レポート 1
~シェルスクリプト課題~
名前:清水俊平
担当情報実験機:joho08
ページ更新日:2011年6月2日
問 1
スクリプトの URL
スクリプト:quiz1.sh.txt
修正後スクリプト:quiz1_re.sh.txt
スクリプトの使い方の解説
(1) /scriptsにおいてchmod 755 quiz1_re.shを実行する
(2) ./quiz1_re.sh quiz1.html を実行する(quiz1.htmlは任意のファイル名)
(3) 作成するホームページのタイトル名、著者名、項目数を尋ねられるので入力する(項目数は半角数字)
(4) カレントディレクトリの一覧が表示されるので、htmlファイルが作成されているかを確認する
実行結果へのリンク
実行例:quiz1.txt
実行結果例:quiz1.html
(タイトルをITPASSレポート、著者名を清水、項目数を6としてquiz1.htmlを作成した場合)
参考資料
UNIXコマンドリファレンス
- 辞書のようにコマンド全般を調べる時に参考にしました。
PHP:echo-Manual
共同作業した人の名前
特にいません
工夫したこと, 感想
- echoを連ねるのではなくヒアドキュメントを用いて簡略化しました。
- 項目数を入力された数だけ生成するスクリプトの書き方で躓きましたが、forを用いることで解決しました。
- 著者名も書き出されるように工夫しました。
- HTMLファイルの作成自体慣れていなかったので、そこにシェルスクリプトが絡んできて最初は何も分からなかったです。echoやcatで出力すればいいと分かってからは比較的スムーズに進みました。
問 2
スクリプトの URL
スクリプト:quiz2.sh.txt
修正後スクリプト:quiz2_re.sh.txt
スクリプトの使い方の解説
(1) /scriptsにおいてchmod 755 quiz2_re.shを実行する
(2) ./quiz2_re.sh $1を実行する($1は任意の4桁の半角数字 例:1234など)
(3) 入力した数字と答えが10となる計算式が標準出力とquiz2.txtに書き出される(quiz2.txtには計算式の数も表示)
(4) 入力した数が4桁ではない場合はその旨と再度入力を促すメッセージが表示される
(5) 答えが10となる計算式が存在しない場合はその旨が表示される
実行結果へのリンク
実行結果:quiz2.txt
(4桁の数字をを6748とした場合)
参考資料
M.Hiroi's Home Page
- テンパズルの演算方法、特にforを入れ子にしてスクリプトを組む考え方を参考にしました。
会津大学UNIXウィキ
- wcコマンドの使い方を調べました。特に「|」を用いてファイル名を出力しないようにする方法を参考にしました。
CodeZine
- cutコマンドを使い数字を4つに分解する方法を調べました。
共同作業した人の名前
特にいません
工夫したこと, 感想
- 入力された数が4桁かどうかを判断するところで苦戦しました。最初は999<$1<1000で判別できると思いシェルスクリプトを書きましたが、後で「0001」などの数でもerrorとなってしまう問題が発生しました。そこで文字数に着目することでその問題を解決しました。
- まとめて数字を入力するという条件のため、まずそれらを4つの数字に分解するのが難しかったです。後にcutコマンドという便利なものがあると知りましたが、あえてそのままの方針を採用してます。
- 括弧の付け方によって11通りもの計算式を書くのは大変なので、その計算式もforで入れ子にすることで簡略化できるように工夫しました。
- 「*」に関しては他の演算子と同じように書いてしまうとerrorとなるので注意が必要でした。
- 計算式がいくつあるかは出力先のファイルの行数を調べることで解決させました。また、その結果も書き込まれるように工夫しました。
- その時にあった引用符が何なのかを逐一考えることが大変でかつ重要だと思いました。
- 問1よりかなり時間がかかりましたが、なんとか書くことが出来ました。数字の分解方法や式の数を調べるとこなどは、もっと工夫すれば簡略化が出来ると思います。演算子だけでなく計算式もforで括る方針は難しかったですが上手くまとめられたと思います。
修正後
最後に
- とても時間がかかりましたが、自分で考えて工夫をしていく過程は楽しかったです。初めはunixのコマンドもviの使い方もさっぱりでしたが、最終的にはスムーズに作業を進める事ができました。せっかくなので問3も少し考えてみたいと思います。
- Teratermの設定や文字のエンコーディングの問題(ファイルによってencodingがUTF-8、EUC、SJISでごちゃ混ぜになりました)など、本質的ではないとこで思いのほか苦戦しましたが、それも次につながる失敗だったと思います。