このページで解説している内容は、以下の 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

このスクリプトは以下の記事で紹介しています。

Linux基礎:シェルスクリプトの基本

このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。 Linux基礎:シェルスクリプトの基本 シェルスクリプトの基本  Linux で毎回同じコマ…

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
RockyLinux
  • var1 は元のシェルで設定された値を参照できている。
  • var2 はスクリプト内で変更された内容が元のシェルに反映されている。

2.3. bash で実行した場合

[user@rocky9 ~]$ var1="hello"
[user@rocky9 ~]$ var2="init"
[user@rocky9 ~]$ bash testvars.sh
var1=
[user@rocky9 ~]$ echo $var2
init
  • var1 は新しいシェルからは参照できないため空。
  • 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.使用する主なコマンドとオプション

コマンド書式主なオプション説明
bashbash script.sh-xデバッグモードで実行し、各行を表示
sourcesource script.shなし現在のシェルでスクリプトを実行
chmodchmod [オプション] ファイル+x実行権限を付与
echoecho [文字列]-eエスケープシーケンスを解釈

まとめ

  • シェルスクリプトの実行には bash, source, 直接実行(chmod +x) の3つの方法がある。
  • bash 実行 → 新しいシェル環境で実行され、親シェルの変数に影響を与えない。
  • source 実行 → 現在のシェル環境で実行され、変数の参照や変更が反映される。
  • 直接実行 → 実行権限を付与し、./script.sh のようにパスを明示する。

 シェルスクリプトをどのように実行するかを理解することは、システム管理や自動化の場面で非常に重要です。