シェルスクリプトの実行方法

1.bashコマンドでの実行

シェルスクリプトは、bash コマンドを使用して実行できます。

$ bash myscript.sh

 ここで ‘myscript.sh‘ は実行したいシェルスクリプトのファイル名です。この方法では、シェルスクリプトに実行権限がなくても実行できます。

 なぜ、 ‘myscript.sh‘ に実行権限がなくとも実行できるのかというと、’myscript.sh‘ というシェルシェルスクリプトを実行するのではなく、’myscript.sh‘ というファイルを読み込んだ bashを実行することになるからです。

実行権限が必要となるのは ‘myscript.sh‘ ではなく、bashコマンドになります。

2.sourceコマンドでの実行

 source コマンドまたは 「.」 コマンドを使用して、シェルスクリプトを現在のシェルセッションで実行することができます。この方法でも、シェルスクリプトに実行権限がなくても実行できます。

$ source myscript.sh

または、

$ . myscript.sh

 この方法では、シェルスクリプトが新しいサブシェルではなく、現在のシェルで実行されるため、スクリプト内での変数や環境の変更が呼び出し元にも反映されます。

bashコマンドでの実行とsourceコマンドでの実行の違い

・bashコマンドでの実行

 新しいサブシェル内でシェルスクリプトが実行され、シェルスクリプト内での変数の変更が呼び出し元には影響を与えません。

・sourceコマンドでの実行

 現在のシェルセッションでシェルスクリプトが実行されるため、シェルスクリプト内での変数の変更が呼び出し元にも影響を与えます。sourceコマンドは組み込みコマンドです。

3.シェルスクリプトに実行権を設定し、シェルスクリプトのパスを指定する方法

・絶対パスを指定してシェルスクリプトを実行する

まず、シェルスクリプトに実行権を与えます。

$ chmod a+x /path/to/myscript.sh

その後、絶対パスで実行します。

$ /path/to/myscript.sh
・相対パスを指定してシェルスクリプトを実行する(失敗例)

 カレントディレクトリを表す「.」を指定せずに実行すると「コマンドが見つかりませんでした…」というエラーになってしまいます。その理由は、現在、ログインしているユーザーのホームディレクトリ、ここでは ‘/home/user01’ がPATH環境変数に定義されていないからです。

$ myscript.sh
bash: myscript.sh: コマンドが見つかりませんでした...
・相対パスを指定してシェルスクリプトを実行する(成功例)

 PATH 環境変数にシェルスクリプトのディレクトリが含まれていない場合、相対パスの先頭に「./」をつけることで、カレントディレクトリを表すことができます。この方法でシェルスクリプトを実行すると、bash はカレントディレクトリを探索し、スクリプトが見つけることができれば実行します。

$ ./myscript.sh