Linuxでは、スクリプト言語によるプログラミング機能が備わっており、これを「シェルスクリプト」といいます。
シェルスクリプトを使うことにより、条件分岐や繰り返しといった制御構文などを組み合わせ、より柔軟なコマンド処理を行うことができるようになります。また、一連のコマンド操作をスクリプトファイルにあらかじめ記述しておくことにより、サーバー管理作業の自動化も可能となります。
当記事では、bashシェルスクリプトの様々な実行方法と実行環境の違いについて解説していきます。
シェルスクリプトは、一般的なテキストファイルとして記述していきます。 そのため、viなどのテキストエディターで作成することができます。スクリプトの内容が記述できたらファイルとして保存しますが、シェルスクリプトファイルであることを明示するためにファイル名の後ろに「.sh」をつけるのが一般的です。
例えば、「Hello World」とディスプレイに表示するシェルスクリプトは、次のようになります。
シェルスクリプトは先頭行から順にシェルにより解釈・実行されます。
スクリプト例の1行目にある「#!/bin/bash」は、このスクリプトが「/bin/bash」で処理すると定義するための記述です。この記述をシェバンまたはシバン(shebang)と呼びます。シェバンで指定可能なプログラムにはこの他に、別のシェルプログラム(shやzshなど)やPerlやPythonなどのプログラム実行環境を指定することもできます。
シェルスクリプトの実行方法
シェルスクリプトの実行方法には、次の3つがあります。
- 「source」コマンドを使う
- bashシェルの起動時に引数として指定する
- スクリプトファイルに実行権を付与する
①「source」コマンドで実行する
「source」コマンドを使ってシェルスクリプトを実行する場合は、次のようにします。
また、「source」コマンドの代わりに「.」コマンドを使用することもできます。
②bashシェルの起動時に引数として指定する
新たにbashシェルを起動し、その引数としてスクリプトファイルを指定する場合は、次のようにします。
③bashシェルの起動時に引数として指定する
スクリプトファイルに実行権を付与することで、スクリプトを直接実行することができます。
上記の例では、「所有者」に対して「実行権」を設定し、カレントディレクトリの実行ファイルとして「./hello.sh」と指定しています。
シェルスクリプトの実行環境
さて、スクリプトの実行方法を3つ紹介しましたが、実は実行の仕方によってスクリプトの動作環境は変わっていきます。次にスクリプトの実行環境についてご説明します。
①「source」コマンドまたは「.」コマンドで実行した場合
「source」または「.」コマンドで実行した場合、現在実行中のシェル環境でスクリプトが実行されます。たとえば、bashシェルを起動した状態で「source」や「.」コマンドでスクリプトを実行すると、現在のbashシェル内でスクリプトが実行されます。この場合、シェルスクリプトのシェバンは無視され、必ず現在の環境下(bash)で実行されます。処理や実行結果が現在のシェル環境に反映されるので、主に設定ファイルの読み込みなどで使用されます。
②「bash」コマンドで実行した場合
「bash」コマンドは新たにbashシェルを起動するコマンドです。引数にスクリプトを指定することで、新しいbashシェル環境でスクリプトが実行されます。この場合もスクリプトのシェバンは無視され、必ずbash環境下で実行されます。
③実行権を付与して実行した場合
上記の2つの実行方法ではシェバンは無視されて実行されていました。それに対し、実行権を付与した場合はシェバンが読み込まれ、指定の環境下で実行されます。また、「bash」コマンドで実行した場合と同様に新しい環境下で実行されます。
上記、実行方法と実行環境の違いをまとめると以下のようになります。
いかがでしたでしょうか。
ぜひお勉強の際にお役立てください。