perlという言語のソースを作ります。次のプログラムを書いてHellopという名前で保存します。Helloでもいいのですが、Cで作ったものと名前がかぶるので変えています。ファイルの内容はたったの1行
print "Hello World!\n";
実行します。
$ perl Hellop Hello World!
実行するのはperlというプログラムで、そのプログラムにHellopというファイルを読んで実行するように指示しているわけです。perlはインタープリタでHellopはプログラムということになります。
これも内容を調べてみます。
$ ls -l -rwx------ 1 hoge hoge 6273 2009-05-06 20:00 Hello -rw------- 1 hoge hoge 82 2009-05-06 20:00 Hello.c -rw------- 1 hoge hoge 25 2009-05-06 20:20 Hellop
ファイルの内容を問い合わせてみます
$ file Hellop Hellop: ASCII text
textとあるものはcatで内容を見ることができます。
$ cat Hellop print "Hello World!\n";
hdダンプもしてみましょう
$ hd Hellop 0000000 70 72 69 6e 74 20 22 48 65 6c 6c 6f 20 57 6f 72 |print "Hello Wor| 0000010 6c 64 21 5c 6e 22 3b 0a |ld!\n";.| 0000020 $
どう見てもテキストファイルですね。
UNIX系のOSでは、この perl Hellop を Hellop だけで実行する仕組みがあります。ファイル名が「命令」のように見えるのでわかりやすくなります。
ファイルの先頭に次の1行を加えます。こんどはHelloperlという名前で保存しましょう。
#!/usr/bin/perl print "Hello World!\n";
今度は実行前にもう一つしなければならないことがあります。
$ ls -l -rwx------ 1 hoge hoge 6273 2009-05-06 20:00 Hello -rw------- 1 hoge hoge 82 2009-05-06 20:00 Hello.c -rw------- 1 hoge hoge 40 2009-05-06 20:24 Helloperl -rw------- 1 hoge hoge 25 2009-05-06 20:20 Hellop
このファイルのrw-------の部分はパーミッションといって、このファイルの持ち主が読む権限(r)と書く権限(w)を持っていることを表しています。これに実行する権限(x)を加えなければ実行できません。
$ chmod u+x Helloperl
u+xが持ち主(user)に実行権限(x)を加えるという意味です。
実行権限(x)が加えられたことを確認します。
$ ls -l -rwx------ 1 hoge hoge 6273 2009-05-06 20:00 Hello -rw------- 1 hoge hoge 82 2009-05-06 20:00 Hello.c -rwx------ 1 hoge hoge 40 2009-05-06 20:24 Helloperl -rw------- 1 hoge hoge 25 2009-05-06 20:20 Hellop
一度権限が設定されると、再設定されるまで有効になりますからこの作業は1度だけ必要です。
実行します。
$ ./Helloperl Hello World!
ファイルの内容を問い合わせてみます
$ file Helloperl Helloperl: a /usr/bin/perl script text executable
今度はperlのスクリプト(プログラム)でテキストで書かれていて、実行可能であると言っています。
後は同じです。textとあるものはcatで内容を見ることができます。
$ cat Helloperl #!/usr/bin/perl print "Hello World!\n";
odダンプもしてみましょう
$ hd Helloperl 0000000 23 21 2f 75 73 72 2f 62 69 6e 2f 70 65 72 6c 0a |#!/usr/bin/perl.| 0000010 70 72 69 6e 74 20 22 48 65 6c 6c 6f 20 57 6f 72 |print "Hello Wor| 0000020 6c 64 21 5c 6e 22 3b 0a |ld!\n";.|
端末の中で私たちのコマンドラインからの命令を解釈して実行しているプログラムをシェル(shell)と言います。シェルにはコマンドをあらかじめファイルに書いておいてまとめて実行するという仕組みがあります。これをシェルスクリプトといいます。
これもインタープリタ型の言語といえます
ソースを作ります。次のプログラムを書いてHellosという名前で保存します。もちろんこれもHelloでもいいのですが、Cで作ったものと名前がかぶるので変えています。ファイルの内容はたったの1行
echo "Hello World!\n"
そして実行権は、
$ sh Hellos Hello World!\n
または、
$ . Hellos Hello World!\n
実行権があればファイル名だけで実行できます。
$ chmod u+x Hellos $ ./Hellos Hello World!\n
perlでは1行目に何というインタプリタで実行するかを指定しましたが、これを書かなければいつも使っているシェルで実行されます。もし書きたければ、
#!/bin/sh echo "Hello World!\n"
とします。
実は先頭の#!でインタープリタを指定する仕組みが作られたのは、シェルにいくつかの種類があって、若干書き方が異なったからです。シーエルはユーザーの好みで切り替えられるのですが、だれが実行しても同じシェルで実行するようにしなければならなかったのでした。ついでに、perl, python, rubyなど将来作成される物も含めていろいろなインタープリタを指定してプログラムをコマンドのように実行できるようにしました。これはすごくステキな仕組みです。
ちなみにLinuxの多くがbashというシェルを標準としています。他に、csh や tch などがありますが、標準のシェルは sh という別名を付けるのが普通です。
聖愛中学高等学校