このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linux基礎:シェルスクリプトの実行方法

シェルスクリプトの実行方法
Linux では、複数のコマンドを自動化するためにシェルスクリプトを作成し、それを実行することで効率的に作業を進められます。しかし、シェルスクリプトを「どのように実行するか」によって動作が変わる場合があります。
特に bash コマンドで実行する方法 と source コマンドで実行する方法 では、変数の扱い方に大きな違いがあり、シェルスクリプトの動作に直結します。また、スクリプトに実行権限を与えてパスを指定する方法も一般的です。ここでは、これらの実行方法を比較しながら解説します。

1.シェルスクリプトの実行方法の種類
以下のシェルスクリプトをあらかじめ、準備しておきます。
スクリプト:syscheck.sh
#!/bin/bash
# システム情報をログに保存するスクリプト
date >> sysinfo.log
echo "----------------------------" >> sysinfo.log
uptime >> sysinfo.log
echo "----------------------------" >> sysinfo.log
free -h >> sysinfo.log
echo "============================" >> sysinfo.logこのスクリプトは以下の記事で紹介しています。
1.1. bash コマンドで実行
bash コマンドの引数としてシェルスクリプトを指定すると、新しいサブシェルが起動され、その環境でスクリプトが実行されます。
書式
bash シェルスクリプトファイル名例: bash で実行
[user@rocky9 ~]$ bash syscheck.shこの場合、スクリプト内での変数操作は元のシェル環境に影響しません。
1.2. source コマンドで実行
source コマンドは、スクリプトを「新しいシェル」ではなく「現在のシェル」上で読み込んで実行します。
書式
source シェルスクリプトファイル名例: source で実行
[user@rocky9 ~]$ source syscheck.shこの場合、スクリプト内で設定・変更した変数は元のシェル環境に反映されます。
1.3. 実行権限を付けて実行
シェルスクリプトに実行権限を与え、絶対パスまたは相対パスを指定する方法もあります。
書式
./シェルスクリプトファイル名例: 実行権を与えて実行
[user@rocky9 ~]$ chmod u+x syscheck.sh
[user@rocky9 ~]$ ./syscheck.sh環境変数PATH に含まれていないディレクトリでは、./ を明示する必要があります。
2.bash 実行と source 実行の違い
2.1. 環境変数の取り扱い
次のようなシェルスクリプト(testvars.sh)を例にします。
スクリプト:testvars.sh
#!/bin/bash
echo "var1=$var1"
var2="RockyLinux"2.2. source で実行した場合
[user@rocky9 ~]$ var1="hello"
[user@rocky9 ~]$ var2="init"
[user@rocky9 ~]$ source testvars.sh
var1=hello
[user@rocky9 ~]$ echo $var2
RockyLinuxvar1は元のシェルで設定された値を参照できている。var2はスクリプト内で変更された内容が元のシェルに反映されている。
2.3. bash で実行した場合
[user@rocky9 ~]$ var1="hello"
[user@rocky9 ~]$ var2="init"
[user@rocky9 ~]$ bash testvars.sh
var1=
[user@rocky9 ~]$ echo $var2
initvar1は新しいシェルからは参照できないため空。var2の変更は元のシェルに影響しない。
表にまとめると以下のようになります。
| 実行方法 | 変数の扱い | 元のシェルへの影響 |
|---|---|---|
| bash | 新しいシェルで実行。親シェルの変数を引き継がない(export されていない限り)。 | 影響なし |
| source | 現在のシェルでそのまま実行。変数を引き継ぎ、変更も反映。 | 影響あり |
3.実行ファイルと PATH
3.1. PATH に含まれていない場合の実行
[user@rocky9 ~]$ ./syscheck.sh./ を付けずに
[user@rocky9 ~]$ syscheck.sh
bash: syscheck.sh: コマンドが見つかりませんでした...となるのは、カレントディレクトリが 環境変数PATH に含まれていないためです。
3.2. 絶対パスでの実行
[user@rocky9 ~]$ /home/user/syscheck.sh絶対パスを指定すれば PATH に依存せず実行できます。
4.使用する主なコマンドとオプション
| コマンド | 書式 | 主なオプション | 説明 |
|---|---|---|---|
| bash | bash script.sh | -x | デバッグモードで実行し、各行を表示 |
| source | source script.sh | なし | 現在のシェルでスクリプトを実行 |
| chmod | chmod [オプション] ファイル | +x | 実行権限を付与 |
| echo | echo [文字列] | -e | エスケープシーケンスを解釈 |
まとめ
- シェルスクリプトの実行には bash, source, 直接実行(chmod +x) の3つの方法がある。
- bash 実行 → 新しいシェル環境で実行され、親シェルの変数に影響を与えない。
- source 実行 → 現在のシェル環境で実行され、変数の参照や変更が反映される。
- 直接実行 → 実行権限を付与し、
./script.shのようにパスを明示する。
シェルスクリプトをどのように実行するかを理解することは、システム管理や自動化の場面で非常に重要です。
