ITPASS 実習レポート 1

名前:横山 康喜

担当情報実験機:joho 20

問 1

スクリプトの URL

./scripts/quiz1.sh.txt
このスクリプトを実行し4桁の引数を入力することでその数字が円周率の小数点以下何桁目から始まるかが表示されます。

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

まずitpass上のkadai1_data.datを自分の計算機にコピーし、上のシェルスクリプトをホームディレクトリにおいて "mv quiz1.sh.txt quiz1.sh" でリネームしてください。
そして "chmod 744 quiz1.sh" で実行権限を得たあとに "./quiz1.sh 1415" といったように引数を入力した上で実行してください。
入力した引数が小数点100万桁以内にあれば何桁目から始まるか、100万桁以内にない場合はエラーメッセージが出ます。
さらに入力した引数が4桁出ない場合には再度入力を要求するのでそこで4桁の数字を打ちこんでください。

実行結果へのリンク

問1 実行結果 

参考資料

『UNIX & Linux コマンド・シェルスクリプト リファレンス』 by SUNONE
引数についての説明
これをもとに$@を使おうとしました。

ITpro by 日経コンピュータ
ループ構造のbreakについて
whileの中にifを入れたループ構文の実例を見てやり方が分かりました。

共同作業した人の名前

上野 友輔
4桁の数字を切り抜いて引数と合わなければ1桁ずつずらしていくというやり方は思いついたのですがコマンドが分からずa=1,b=4にすることcutのコマンドがあることを教えてもらいました。

工夫したこと, 感想

入力された引数の数ではなく桁数を調べるのに$@を使おうと思ったのですがうまく行かず また4桁であることを確認する際に "ketasu != ????" としようと思ったのですがこれもうまく行かず提出された上野君、野口君のスクリプトを参考にさせてもらい完成しました。 さらに引数を入れていなかった人が再度実行しなくても数字を入力できるように後から数字を打ち込んでもそれを読み込めるようにしました。

問 2

スクリプトの URL

準備用 ./scripts/quiz2-1.sh.txt
これは気象データのそれぞれの〇〇.csvのファイルの最後に年月を書き加えるためのものです。
本番用 ./scripts/quiz2.sh.txt
これを実行し引数に知りたいランキングのタイトルを入力するとベスト10が表示されます。

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

まずitpassサーバ上の気象データを自分の計算機にコピーし次に上記の2つのシェルスクリプトをホームディレクトリに置き、 "mv quiz2-1.sh.txt quiz2-1.sh" "mv quiz2.sh.txt quiz2.sh" でリネームし "chmod 744 quiz2.sh" "chmod 744 quiz2-2.sh"で実行権を得た後に quiz2-2.shを先に 一回だけ 実行してください。これは実行した回数だけ年月が入力されてしまうのでそれを避けるためです。
その後quiz2.shを実行する際に引数として"日最高気温""日最低気温""日積算降水量""日最小湿度"のどれかを入力してください。違う言葉を入力したり、引数を2つ以上入力するとエラーとなり再度入力を求められるのでそこで入力してください。

実行結果へのリンク

問2 実行結果

参考資料

ITpro by 日経コンピュータ
ここでコマンドの詳しい使い方を調べました。


上野君のレポートページ
野口君のレポートページ
上の二人のレポートのやり方からコマンドの使い方やシェルの構成などを学びました。

共同作業した人の名前

上野 友輔 
野口 貴久
共同ではなく一方的ではありますが、提出されたシェルスクリプトをかなり参考にさせてもらいました。

工夫したこと, 感想

バブルソートを実験実習の基礎でならっていたのでそれを応用すればいいというように考えましたがそれを実際にするにあたって手こずり、sedのコマンドを知ったのでバブルソートではないやり方へ変更しました。
またスクリプトを2つに分けるというやり方は自分では思いつかず、上野君のやり方を参考にさせてもらいました。
またこちらでも引数に間違った入力がされた場合には再度聞き直し結果を表示できるようにしました。ただ入力しても文字を読み取ることができず日本語入力が原因かと思ったのですが提出されているものと見比べるとそうではないようで、よくわかりませんでした。 やり直しをした結果ベスト10は表示されるようになったのですが同率が表示されないのと "引数が多すぎます"というコメントが出るようになってしまいました。