シェルスクリプトを単に作っただけでは、それを実行することはできません。適切なパスを設定し、実行権を与える必要があります。これらはそれぞれLinuxの基本的な操作手順になりますので、ここでしっかりおさえておくことにしましょう。
Linuxを使っていると複数のコマンドを連続して、しかも特定の条件付きで起動したくなることがあります。あるコマンドを実行後、次のコマンドを実行し、うまく実行された場合、されなかった場合に処理を分けて……などなど。このような場合に使われるのがシェルスクリプトです。今回はこのシェルスクリプトを実際に作ってみましょう。
まずはもっとも基本的なシェルスクリプトを作成してみます。エディタでファイルを編集し、以下のようなファイルを作成してください。
echo "Hello World"
このたった1行だけです。ファイル名を「helloworld」として保存します。エディタを使わずとも、プロンプトから以下のようなコマンドを実行してファイルを作ってもいいかもしれません。
$ echo 'echo "Hello World"' > helloworld
先頭のドル($)は、コマンドラインからの実行を意味していますので、実際に入力する必要はありません。シングルクオーテーション(')やダブルクオーテーション(")が並んでいてなにやら複雑ですが、シングルクオーテーションの中身を「helloworld」というファイルに出力しているだけです。ファイルが作成されたでしょうか?
作成されたファイルはそのままでは実行できません。実行権を付与します。
$ chmod +x helloworld
これでこのファイル「helloworld」に実行権がつきました。さっそく実行してみましょう。
$ helloworld Hello World
“Hello World”という文字が表示されましたので、実行が成功しました。うまく実行されない人は以下のようにやってみてください。
$ ./helloworld Hello World
今度はうまく実行されましたか? うまく実行されないときはlsコマンドで、作成したファイル名と実行権を確認してみてください。
$ ls -l helloworld -rwxr-xr-x 1 redhat users 21 Jun 7 01:13 helloworld
最初の属性が-rwxr-xr-x となっているところがポイントで、rw-r--r--となっていたりしてxが入っていないと実行されません。もう一度前述のchmodコマンドを実行してみてください。MS-DOSの場合は実行ファイルは拡張子.batという決まりがありましたが、Linuxは実行権さえついていればファイル名に制限はありません。
ついでに、自分がどこのディレクトリにいても(カレントディレクトリがどこであっても)自分で作成したシェルスクリプトを実行できるようにしましょう。まず、ホームディレクトリに、自分で作ったコマンドを格納しておくディレクトリを作成し、そこへ実行コマンドを移動させます。ここではtoolsという名前でディレクトリを作成し、そこへ移動させます。
$ mkdir tools $ mv helloworld tools
そしてパスの設定を変更し、上記ディレクトリを含むようにしておきます。
$ export PATH=~/tools:$PATH
MS-DOSにはパスという概念がありましたが、Windowsユーザにはなじみが薄いかもしれません。パスとは、実行コマンドが格納されているディレクトリを登録しておくものです。登録しておくと、そのコマンドを実行するときにどこからでも呼び出すことができます。
パスの指定は上記の例のように、指定したいディレクトリ名を(:)コロンで区切って登録します。
なお、bashではなくオリジナルのボーンシェル(sh)の場合は、
$ PATH=~/tools:$PATH $ export PATH
このように2行で指定する必要があります。ただし、このとき誤って export PATH=~/tools としてしまわないように、 気をつけてください。このようにしてしまうと、すでに指定されているディレクトリがパスからなくなってしまうので、基本コマンド(viやlsなど)が実行できなくなってしまいます。もちろんその場合でもフルパス(/bin/viや/bin/ls)を指定することでコマンドを実行することはできます。
パスを設定したら、その動作を確認してみましょう。さきほどhelloworldは移動したため、もうホームディレクトリの下にはありません(toolsの下にあります)。そこで、ホームディレクトリからhelloworldを実行してみます。
$ cd ~ $ helloworld Hello World
チルダ(~) は自分のホームディレクトリをあらわします。うまく実行されましたか?
パスの設定が正しく行われて、自分の作成したシェルスクリプトが パス上に登録されているかどうかは、whichまたはtypeコマンドで確認することができます。
$ which helloworld /home/redhat/tools/helloworld または $ type helloworld helloworld is /home/redhat/tools/helloworld
正しく設定されていれば、上記のようにさきほど登録したシェルスクリプトがフルパスで表示されます。表示されない場合は、もう一度パスの設定を確認してみてください。次回ログインしたときも、毎回自分で作成したディレクトリをパスに設定したい場合は、~/.bashrcのファイルを編集し、一番下の行に、
export PATH=~/tools:$PATH
を1行追加しておきましょう。そうすることによりログインするたびに自動的にパスの設定が行われますので、次回からなにもしなくても、どのディレクトリにいても自分が作ったファイルを実行できることになります。
また、さきほど作成したスクリプトを実行したときに、
$ helloworld
では実行できなくて、
$ ./helloworld
なら実行できた人もいると思います。それは、パスにカレントディレクトリが含まれていないからです。カレントディレクトリがパスに含まれていれば、./hellowolrdと書かなくとも実行されます。好みにもよりますが、カレントディレクトリの状態によって実行されるコマンドが変わることを避けるため、UNIXの世界ではパスにカレントディレクトリを含めないことが多いようです。
これでシェルスクリプトを作成し、実行する方法と環境が整いました。 次回からは、シェルスクリプトの基本機能や、よく使われる機能について解説していきたいと思います。
Copyright © ITmedia, Inc. All Rights Reserved.