UNIX入門:0. "Hello World!"

 UNIXでプログラミングをしてみましょう。「プログラミング?そんなのできるの?」といった疑問や不安は要りません。次の作業を順を追って,1つ1つ,丁寧にこなすだけです。面倒臭がらずやるか否かのみです。

 ここで作成するプログラムは,ただ単に次を表示するという単純な作業をさせるプログラムです。

Hello World!
Message

ですが,プログラミングの第一歩は,そのような簡単な作業をさせるか否かではなく,先ずはプログラムを書くか否かにあるといえます。

0.0. 準備

 プログラムを書くと,その内容を一つのファイルとして残します。その保存場所を作りましょう。UNIX のサーバーに接続した状態,あるいは UNIX のターミナルの画面から,太字部分を入力毎にリターンを押します。

% mkdir My_Programs     (プログラムを保存するディレクトリ"My_Programs"を作成)
% cd My_Programs        (ディレクトリ"My_Programs"へ移動)

注) 次回 login 時は,"cd My_Programs"と打てば,同じ状態になります。 「ディレクトリ」とは,Macintosh や Windows でいうフォルダ。

準備完了。

0.1. シェル

 「シェル」は,UNIX のコマンド解釈装置でもあり,コンピュータの起動処理もシェルで書かれている程,UNIX を動かす上での基礎的要素。カーネル(kernel, 核)と呼ばれる中枢部分をあたかも覆う貝殻(shell)という意味合い。ここでは,そのようなシェルを使って,プログラムを作ってみます。

 文字をファイルに書くために「エディタ」と呼ばれるソフトを利用します。UNIX には,"vi" や "emacs" といった有名なエディタがあります。ここでは,余り日本では使われていないエディタ"pico"を利用してみます。(pico は,私が Ph.D を取得した大学,University of Washington が作成したエディタ。機能は余りないが,単純明快で良い。)

 pico を起動します。

% pico

すると,次のような画面になるでしょう。(現在は,GNU nano になっています。)

    UW PICO(tm) 2.3                      New Buffer                                 
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
^G
^X
 Get Help  
 Exit
^O
^J
 WriteOut  
 Justify
^R
^W
 Read File  
 Where is
^Y
^V
 Prev Pg   
 Next Pg
^K
^U
 Cut Text  
 UnCut Text
^C
^D
 Cur Pos
 Del Char  

■pico 操作方法
^ (caret) は,「control (CTRL) キーを押しながら」という意味。
pico 終了:^X
ファイルの保存:^O
カーソルがある文字の削除:^D
カット:^K
ペースト:^U
文字列探し:^W
マニュアル:^G

さあ,いよいよ,プログラミングです。次の青字部分を打ってください。(改行は,リターンキー。"Message" 部分には,好きなメッセージを。)

    UW PICO(tm) 2.3                      New Buffer                                 
#!/bin/sh
       (空行は,リターンで。ここの空行は,入れても入れなくとも,同じです。)
echo "Hello World!"
echo "Message"
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
(空欄)
^G
^X
 Get Help  
 Exit
^O
^J
 WriteOut  
 Justify
^R
^W
 Read File  
 Where is
^Y
^V
 Prev Pg   
 Next Pg
^K
^U
 Cut Text  
 UnCut Text
^C
^D
 Cur Pos
 Del Char  

注意) 1行目にある /bin/sh は,奥山研究室のサーバーの場合です。他のサーバーの利用者は,エディタを起動する前に,次を実行してください。
% which sh
その答えを /bin/sh 部分に入力します。

出来ましたか?それでは,ファイルを保存します。次の手順を踏んでください。

これで"hello.sh"という「シェル・スクリプト」(プログラム)ができました。実行させましょう。

 実行方法は,次の通りです。

% sh hello.sh

すると,次のようになるはずです。

% sh hello.sh
Hello World!
Message
%

実行権を与えると,"./hello.sh"と打つだけで動きます。

% chmod u+x hello.sh  (あなた (user) だけに実行 (excute) の権限を与える (+))
% ./hello.sh          (hello.sh を実行)
Hello World!
Message
%

0.2. Perl

 Perl は,インターネットでのチャットや掲示板,アクセス・カウンターなどの CGI で利用されているスクリプト言語です。シェルと次に扱うC言語の良い要素を使いやすくまとめたような言語で,CGI だけでなく,様々な用途に使用可能ですので,多くの方が利用しています。

 早速,プログラミングしましょう。エディタを使って,次のように入力してください。

#!/usr/bin/perl

print "Hello World!\n";
print "Message\n";

注意) 1行目にある /usr/bin/perl は,奥山研究室のサーバーの場合です。他のサーバーの利用者は,エディタを起動する前に,次を実行してください。
% which perl
その答えを /usr/bin/perl 部分に入力します。

入力完了後,"hello.pl"として,ファイル保存してください。これで"hello.pl"という「Perl スクリプト」の完成です。

 実行方法は次の通りです。

% perl hello.pl

シェル・スクリプトのときと同じように,実行権を与えれば,"./hello.pl"と打つだけで動きます。実行権の与え方は,次の通り。

% chmod u+x hello.pl

0.3. C言語

 シェルにしても Perl にしても,実行権を与える前は,次のように実行のためのコマンドを打つ必要がありました。

% sh hello.sh
% perl hello.pl

これらの意味は,シェル・スクリプトの場合には「シェル (sh) がスクリプト"hello.sh"の中身を解釈し実行しなさい」,Perl スクリプトの場合には「Perl (perl) がスクリプト"hello.pl"の中身を解釈し実行しなさい」というものです。すなわち,「スクリプトの解釈 -> 実行」という手順を踏んでいる訳です。このような言語を「インタプリタ」と言います。

 これに対し,実行ファイル用のソースを作成し,そのソース・ファイルから実行ファイルを生成する方法があります。このような言語を「コンパイラ」と呼びます。コンパイラの場合,「ソースの作成 -> 実行ファイルの生成 (コンパイル) -> 実行」という流れになります。当然,実行ファイルが既にあるということは,インタプリタに比べれば,「解釈」がないだけ実行速度が速くなることを意味します。

 コンパイラで有名なのは,何と言っても,「C言語」です。付録に示しましたが,UNIX の OS を最初に作成した人が C言語の作者であり,UNIX の OS は C言語で書かれています。ここでは,C言語によるプログラミングを見ます。

(a) ソースファイルの作成

 コンパイラの場合,「ソースの作成 -> 実行ファイルの生成 (コンパイル) -> 実行」という流れでした。ここでは,ソースを作成します。

 エディタを起動し,次を入力し,"hello.c"というファイル名で保存してください。

#include <stdio.h>

int main (void)
{
     printf ("Hello World! \n"); // \n の \ は,JISキーボードの場合,円マーク ¥ です。
     printf ("Message \n");

     return 0;
}

これで "hello.c" という「ソース・ファイル」の完成です。

(b) コンパイル

 次は,コンパイルです。

% cc -o hello.out hello.c

エラーメッセージが何もでなければ,コンパイル成功です。"hello.out" という実行ファイルが出来上がっています。

(c) 実行

 実行には,"./hello.out" のみです。実行権をわざわざ与える必要はありません。

% ./hello.out
Hello World!
Message
%