roy > naoya > 基礎プログラミングII[月1] > (1)前期の復習
101/102教室のUNIX端末を利用する際には、204/205教室のWindowsマシンを利用する場合と同様に、ログイン、ログアウトが必要になる。ログインするためにはユーザー名とパスワードを入力する。
ログイン時のユーザー名とパスワード
ログインにあたり、最初の1回だけはオプションからセッションでFVWMウィンドマネージャーを選択後、ユーザ名[Return]、パスワード[Return]を入力する。FVWMウィンドマネージャーを選択すると下の右図のようにユーザ名入力欄の下に「FVWMウィンドマネージャ」と表示される。この操作は一度行うと記憶されるので、次回以降はユーザー名とパスワードを入力するだけでよい。
なお、パスワードは入力しても画面に表示されない。パスワードを正しく入力して[Return]キーを押すとログインできる。ログインすると3つのウィンドウが自動的に起動する。各ウィンドウの名称と働きはそれぞれ下記の通りである。いずれもウィンドウ上部に名称が書いてあるため、どれがどれに対応するか確認できるはずである。
ウィンドウの名称とタイトル
まずは、ログアウトをしよう。ログアウトの際に使うのはconsoleなので、ウィンドウの上部のバーをマウスでクリックしてconsoleを前面に出す。すると、以下の文字列が書かれているはずである({c10xxxx}の部分は自分の学籍番号)。この文字列をプロンプトと呼び、ユーザーからの命令を待っている状態であることをあらわす(ktermも同じ)。
pan{c10xxxx}%
ログアウトは利用終了時に行う操作で、実施しないまま席を離れると、作成したファイルを第三者に閲覧されたり削除される可能性がある。ログアウトを行うためには、consoleで、logout[Return]もしくはexit[Return]と入力する。正しく入力すれば、初期のログイン画面に戻る。
pan{c10xxxx}% exit[Return]
キーボードから入力を行う際にはフォーカスに注意が必要である。マウスでいずれかのウィンドウにカーソルを合わせると、ウィンドウの枠の色が変わる。このウィンドウをフォーカスの合ったウィンドウと呼び、キーボードからの入力は、このウィンドウに対して行われる。ウィンドウを前面に出したい時は、ウィンドウのタイトルバーをマウスで左クリックする。ウィンドウが背面にあってもフォーカスがあっていれば入力できる。ウィンドウの切り替えはショートカットキーで行うこともできる。ショートカットキーを使って切り替えると、切り替えたウィンドウに必ずフォーカスが合うので便利である。
ショートカットキーを用いたウィンドウの切り替え
注:Ctrl-1はCtrlキーを押しながら1を押すという意味
Windowsではデスクトップにアイコンが表示されているが、ここでは全く表示されていない。UNIXではktermでコマンドを入力してファイルのコピーやアプリケーションの実行を行う。難しい言葉で前者をGUI(Graphical User Interface)、後者をCUI(Charactor User Interface)という。
頻繁に使うアプリケーションのみメニューが準備されている。デスクトップのウインドウ以外の背景で左クリックすると以下のようなメニューが表示される。使いたいアプリケーションを選択すると起動する。
この授業で使用するアプリケーションのリストは以下の通り。
コマンドとは、コンピュータに対して行う命令であり、あらかじめ規定の文字列が定められている。コマンドを実行する場合、コマンド名[Return](コマンド入力後Returnキーを押す)が原則となる。ここでは、最低限覚えておかなければならないコマンドのみ確認する。
lsはlistの略で現在のディレクトリ(カレントディレクトリと呼ぶ)の中身を表示するコマンドである。ディレクトリはWindowsでいうフォルダのことである。Windowsではフォルダの中身はフォルダを開いている限りいつでも参照可能であるが、CUIではコマンドを入力しなければ確認することができない。コマンドを実行する場合はコマンド[Return]なので、ls[Return]と入力する。
pan{c10xxxx}% ls[Return] Mail/ maildir/ public_html/ test.rb Windows/ msmail/ script/
表示されたリストにはMail/のように/がついているものがある。これはディレクトリ(フォルダ)をあらわす。/がついていないものがファイルである。
UNIXでは大文字と小文字を区別する。例えば、lsのかわりにLSと入力すると、「そんなコマンドは見つからない」と表示され、コマンドは実行されない。
確認
授業で作成するプログラムを保存するディレクトリを確認しよう。本授業ではrubyというディレクトリを作成したものとして説明を進める。仮に別の名称で作成していた場合は、以降、ディレクトリ名のrubyをその名称に読み替えること。
今作成したrubyディレクトリに移動しよう。Windowsであればフォルダをダブルクリックするが、ここではcdコマンドを利用する。cdはChange Directoryの略である。
pan{c10xxxx}% cd ./移動先ディレクトリ[Return]
で移動することができる。./は自分が今いるディレクトリ(カレントディレクトリ)の意味であり、省略可能である。コマンド名とディレクトリ名の間は半角スペースをあける。 ktermには現在のディレクトリが右端に表示されるので、移動できたかどうか確認できる。ちなみに最初の段階では[~]と表示されているが、これは各ユーザーが自分のデータをおくことが出来る最上層のディレクトリをあらわし、ホームディレクトリと呼ぶ。ログイン直後はかならずホームディレクトリに位置する。以下はホームディレクトリからrubyディレクトリに移動した様子をあらわしている。
pan{c10xxxx}% cd ./ruby[Return] [~] pan{c10xxxx}% [~/ruby]
または./を省略して
pan{c10xxxx}% cd ruby[Return] [~] pan{c10xxxx}% [~/ruby]
今度はもとのディレクトリに戻ってみよう。もとのディレクトリは..(ピリオド2つ)と表現する。したがって、rubyディレクトリにいる場合、cd ..[Return]で1つ上のホームディレクトリに戻ることが出来る。ktermの右側の現在のディレクトリ表示が[~]に戻っているか確認しよう。
pan{c10xxxx}% cd ..[Return] [~/ruby] pan{c10xxxx}% [~]
それでは簡単なプログラムを作成してみよう。emacsでファイルの新規作成を行うコマンドはCtrl-x Ctrl-fなので、これを入力しよう。するとemacs下部のミニバッファに以下のように表示される。
Find file: ~/
この後に続けて以下のように入力しよう(入力した部分を黄色で示す)。
Find file: ~/ruby/amount.rb[Return]
Rubyプログラムはファイル名に必ず.rbの拡張子をつける。ruby/amount.rbとなっているが、これはrubyディレクトリの中にamount.rbというファイルを新規作成せよという意味である。
では、プログラムを書いてみよう。まずは余り考えずに以下の通り入力してみよう。
#!/usr/koeki/bin/ruby amount = 1000 printf("%d円になります。\n",amount) print"支払い金額を入力してください\n" pay = gets.chomp!.to_i change = pay - amount printf("%d円のお返しになります。ありがとうございました。\n",change)
日本語の入力を行う場合はCtrl-oを押す。Ctrl-oを押すごとに日本語入力と英語入力が切り替わる。
入力したら保存をする。保存はCtrl-x Ctrl-sである。保存をしていない場合は-E:の横に**と表示されている。保存をすると**が消えることを確認しよう。
プログラムを作成したら、今度は実行してみよう。実行するのはktermなので、ktermでrubyディレクトリに移動し、以下のように入力する。
pan{c10xxxx}% cd ruby[Return] #=>ruby/に移動 pan{c10xxxx}% ruby amount.rb[Return] #=>hello.rbの実行
すると次のように表示される(はずである)。
pan{c10xxxx}% ruby amount.rb[Return] 1000円になります。 支払い金額を入力してください。 5000[Return] 4000円のお返しになります。ありがとうございました。
amount.rbは短いが立派なプログラムである。各行についてそれぞれ解説する。
今実行したamount.rbをktermで実行すると、結果が4行表示された。プログラムの出力結果やプログラムの書き方を踏まえると、print、printfはいずれも「表示せよ」という命令であることがわかる。このように、何らかの働きを持つあらかじめ登録された文字列のことをRubyではメソッドと呼ぶ。
では、printメソッド、printfメソッドの働きについて、それぞれの違いを意識しながら確認してみよう。
printfについてはもう少し複雑な働きをするが、当面は上述の通り理解しておいて問題ない。
amount.rbで用いられたamount、pay、changeのように何らかの値を代入して保管しておく役割を果たすものを変数とよぶ。変数名は1文字である必要はない。
ところで、amount.rbではamount = 1000と書かれているが、この意味は以下のとおりである。
=は右辺を左辺に代入するという意味を持つ。したがって、z = x + yはx+yの結果をzに代入するということになる。ここでは、=や+の前後に半角のスペースをとっているが、スペースはあってもなくてもよい。
変数には数字だけでなく文字を代入することもできる。文字を代入する場合には値に""をつける。
\nは「バックスラッシュエヌ」と呼び改行をあらわす。バックスラッシュは環境により円マークとして表示される場合がある。バックスラッシュのないキーボードを使用している場合は円マークで代用する。""内のメッセージを表示するprintメソッドやprintfメソッドでは""の末尾に必ず\nをつける。
amount.rbの途中でgetsというメソッドが登場している。支払い金額を入力する際に使用しており、キーボードから入力した値を受け読み込むという働きを持つメソッドであった。
実行すると、「支払い金額を入力してください。」の後、つまりgetsの行でユーザからの入力待ちになる。ここで何らかの数値を入力すると、処理が再開され、おつりが表示される。
pay = gets.chomp!.to_i
プログラムの中では具体的には上のように書かれていた。getsはキーボードからの入力を読み込むメソッドであるが、キーボードから入力した値が数字の場合はchomp!.to_iを後ろにつけて、gets.chomp!.to_iとする必要がある。したがって、この行はキーボードから入力された数字を読み込んでpayに代入している。chomp!やto_iもメソッドであるが、それぞれ次の働きを持つ。getsの働きと併せてまとめてみよう。
キーボードから入力した値が「5000[Return]」の場合、Returnはプログラムでは\nとして扱われるので、「5000\n」というデータを入力したことになる。getsメソッドを使って読み込んでいるので、5000は「ごせん」ではなく「ごぜろぜろぜろ」という文字である。ここから、chomp!メソッドを使って\nを取り除き、to_iメソッドを使って整数に変換してpayに代入している。
amount.rbは商品の金額が1000円で固定となっているが、自分で好きな金額を入力できるように改良する。余力がある人は商品の金額を3回入力し、合計金額を出してから支払い金額を入力するように変更する。
うまくいかない場合は、修正途中でもよいので授業終了時までにメールで解答を送信すること。出席点は2点。提出要領は下記の通り。
Tips:mewによるメールの送り方はMewコマンドを参照
メール送信後には受信作業をする
mewでメールを送信した後は、受信コマンドのiおよびパスワードを入力して正しく送信できたか確認しよう。メールアドレスを書き間違えた場合にはMAILER-DAEMONからエラー通知が届く。この場合には、届いていないのでアドレスを正しく書き直して再送信する。再送信の方法は上記「mewコマンド」のページを参照すること。