ホーム>ITPASS実習2010レポート1

ITPASS実習2010レポート1

氏名:板倉 統 Itakura Matomu
担当情報実験機名:joho01
2010.5.18提出
2010.5.24修正

今回の課題の出題ページ


目次


問1(必須課題) ファイル自動転送

シェルスクリプトファイルのURL
scripts/quiz1.sh.txt
(※ブラウザで読めるようファイル名に”.txt”を付け加えています。)
概要

このスクリプトは、あるディレクトリの中に入っている全てのファイルを、パーミッションを適切に設定して転送するスクリプトです。この作業を手作業で行うにはファイルを一つ一つ調べ、そのファイルタイプを確認してパーミッションを設定し、cpあるいはscpコマンドで転送するといった何段階ものコマンドの入力が必要です。しかしながら、毎回このような作業を行うことは大変に非効率です。そこで、これらの作業を自動的に行えるよう、シェルスクリプトとして纏めたものが、このスクリプトです。

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

”./quiz1.sh 転送元のディレクトリ名 転送先のディレクトリ名”を打って実行すると、転送元のディレクトリ内の全てのファイルのファイルタイプを調べ、ディレクトリとBashスクリプトなら775、それ以外は664に一旦変更して転送した後、転送元のファイルのパーミッションを復元します。

なお、スクリプトの3行目と4行目を書き換えることによってローカルからサーバーにアップロードすることも可能です。その際は途中でログイン用のパスフレーズを訊ねられますので入力してください。また、ディレクトリとBashスクリプト以外にも775に設定したいタイプがある場合には、スクリプトの47行目に書き加えることで可能になります。

実行結果のURL
results/quiz1.txt
参考資料
  • Linuxコマンド集 INDEX - Linuxコマンド集:ITpro (日経BP社)
    Linuxのコマンドを探す際に参考にさせていただきました。
  • Linuxコマンドリファレンス
    Linuxのコマンドを探す際に参考にさせていただきました。
  • UNIX & Linux コマンド・シェルスクリプト リファレンス
    シェルスクリプトを組む際に参考にさせていただきました。
  • UNIXコマンドの使い方 (須崎純一 京都大学大学院 工学研究科都市環境工学専攻 環境情報学講座)
    cutコマンドの使い方を参考にさせていただきました。
  • 第7章 正規表現
    正規表現について参考にさせていただきました。
  • 感想

    ファイル名の取り出しとそのタイプを調べる部分は文字列の処理がなかなか上手くいかず苦労しましたが、一度出来上がってしまえばその後はコマンド一行で転送ができるようになり、ルーチンワークを自動化することのありがたみを感じることができました。

    ↑トップへ戻る↑

    問2(必須課題) カレンダー作成

    シェルスクリプトファイルのURL
    [2010.5.24]閏年でない年の2月が31日になってしまう点を修正。出雲国用オプションを追加。
    scripts/quiz2.sh.txt
    (※ブラウザで読めるようファイル名に”.txt”を付け加えています。)

    [修正前の旧スクリプト]
    scripts/quiz2-1.sh.txt
    概要

    このスクリプトは、指定した年月のカレンダーを生成するスクリプトです。calコマンドとほぼ同様の動きをしますが、改暦前の1752年9月以前も現在のグレゴリオ暦で表示することができます。大まかには、ツェラー (Zeller) の公式を用いて求める年月の一日の曜日を求め、そこから一日の前に来る空白の数を求めて並べてから日付を1から並べて、7日ごとに改行することでカレンダーらしく表示しています。

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

    ”./quiz2.sh”と打って実行すると ” Enter year & month. ex) 2112 9 ” と訊ねられるので、年と月をスペースで区切って入力し、Enterキーを押してください。すぐにその年月のカレンダーが表示され、スクリプトと同じディレクトリ内のquiz2.txtに結果が書き込まれます。

    なお、文字コードはEUC-JPを用いていますので、それ以外の環境の方は”./quiz2.sh e”と打って実行してください。文字が英語表記になります。また、島根県(出雲国)の方はお手数ですが”./quiz2.sh i”と打って実行してください。10月の旧暦月名が”神在月”と正しく表示されます。

    実行結果のURL
    results/quiz2.txt
    共同作業者
    (敬称略、順不同)
  • 関 友也
  • 松倉 匡志(出雲国の旧暦月名についてアドバイスをいただきました。)
  • 安東 勇太(閏年でない2月の間違いについてご指摘をいただきました。)
  • 参考資料
  • Linuxコマンド集 INDEX - Linuxコマンド集:ITpro (日経BP社)
    Linuxのコマンドを探す際に参考にさせていただきました。
  • Linuxコマンドリファレンス
    Linuxのコマンドを探す際に参考にさせていただきました。
  • UNIX & Linux コマンド・シェルスクリプト リファレンス
    シェルスクリプトを組む際に参考にさせていただきました。
  • BASH Programming - Introduction HOW-TO: その他のスクリプト (Mike G mikkey at dynamo.com.ar)
    readコマンドの使い方を参考にさせていただきました。
  • ツェラーの公式 (ウィキペディア)
    ツェラーの公式について参考にさせていただきました。
  • 単位の歴史 (SRA OSS, Inc. 日本支社)
    グレゴリオ暦への切替えについて参考にさせていただきました。
  • 陰暦の月の名
    旧暦月名について参考にさせていただきました。
  • 神在月 (出雲大社)
    神在月と神無月について参考にさせていただきました。
  • 感想

    チェックのためにcalコマンドと比較していましたところ、calコマンドは1752年9月が面白いことになっていることに気づきました。これはイギリス(とその植民地だったアメリカなども)が1752年9月14日よりユリウス暦からグレゴリオ暦に改めたことを反映しているそうですが、知らずにcalコマンドの表示を信じてしまうと稀に不都合が起こりそうなので、覚えておこうと思いました。

    ↑トップへ戻る↑

    問3(オプション課題) Hit and Blow

    シェルスクリプトファイルのURL
    [2010.5.22]不正な値が入力されたときに関するスクリプトを追加。
    scripts/quiz3.sh.txt
    (※ブラウザで読めるようファイル名に”.txt”を付け加えています。)

    [修正前の旧スクリプト]
    scripts/quiz3-1.sh.txt
    概要

    このスクリプトは、各桁が重複しない4桁の数字(ただし0は含まれない)を当てるゲームのスクリプトです。数字と桁の両方とも正解と一致する数字の数がHitに、数字は一致するが桁が違う数字の数がBlowに表示され、それをヒントに当てていきます。

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

    ”./quiz3.sh”と打って実行すると”Type your first answer!”と上機嫌に表示されますので、適当に4桁の数字を打ってEnterキーを押してください。すると”1 hit 2blow”などと表示されますので、それをヒントに次の4桁の数字を考えて入力してください。4桁全ての数字が当たりますと
    ”Your number matches the answer!!
    You answered 7 times to get the answer.”
    などと表示され終了します。途中、スクリプトと同じディレクトリ内のquiz3.txtに経過が書き込まれていきます。

    スクリプトが正常に機能しているかチェックされる場合には、スクリプトの57行目の先頭の”#”を削除することで問題の数字を表示することができます。

    なお、おかしな値を何度も入力すると、そのうち機嫌を悪くして強制終了します。こうなると、次回起動時に「sorry」と入力して謝らないとゲームが始まらなくなってしまいますので、くれぐれもご注意ください。

    実行結果のURL
    results/quiz3.txt
    共同作業者
    (敬称略、順不同)
  • 安東 勇太(不正な値が入力されたときの処理が抜けている点についてご指摘をいただきました。)
  • 参考資料
  • Linuxコマンド集 INDEX - Linuxコマンド集:ITpro (日経BP社)
    Linuxのコマンドを探す際に参考にさせていただきました。
  • Linuxコマンドリファレンス
    Linuxのコマンドを探す際に参考にさせていただきました。
  • UNIX & Linux コマンド・シェルスクリプト リファレンス
    シェルスクリプトを組む際に参考にさせていただきました。
  • 地球人ネットワークを創るアルク:スペースアルク
    英作文の際に参考にさせていただきました。
  • 感想

    今回の三つの課題の中では一番素直に組み立てることができる問題だったと思います。その上、問1と問2の課題でBashにある程度は慣れることが出来たため、思ったよりもスムーズに組み立てることが出来ました。

    ただ、今回作った三つのスクリプトを眺めていますと、条件分岐やループのカウンターなどを多用していて、不器用さが露呈していることは否めません。もっと美しいスクリプトが書けるよう精進したいと思います。

    ↑トップへ戻る↑

    共同作業者一覧

    (敬称略、順不同)
    ↑トップへ戻る↑

    参考資料一覧

    [シェルスクリプトに関して] [WEBページの作成に関して]
    ↑トップへ戻る↑
    Thank you for your love. ヾ( ゚ω゚ )ノ゛
    [ホームへ戻る]