このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Linux】シェルスクリプトの実行方法
シェルスクリプトの実行方法
シェルスクリプトは、シェルコマンドを記述したテキストファイルであり、複数のコマンドを一度に実行するためのスクリプトです。主にシステム管理やタスクの自動化に使用されます。シェルスクリプトの実行方法にはいくつかの方法があり、目的や環境に応じて適切な方法を選択することが重要です。ここでは、シェルスクリプトを実行するための基本的な方法について詳しく解説します。
シェルスクリプトの実行方法には以下の方法があります。
bash
コマンドでの実行source
コマンドでの実行- ファイルパスを指定して実行
- スクリプトファイル名のみで実行
それぞれの方法について、具体的な使用例と解説を交えて解説していきます。
シェルスクリプトの実行方法
方法 | 説明 | 使用例 |
---|---|---|
bash コマンドでの実行 | bash コマンドを使用してスクリプトを実行します。 | bash script.sh |
source コマンドでの実行 | source コマンドを使用してスクリプトを実行します。スクリプト内の変数が現在のシェルに影響を与えます。 | source script.sh |
ファイルパスを指定して実行 | スクリプトファイルのパスを直接指定して実行します。スクリプトに実行権限が必要です。 | ./script.sh |
スクリプトファイル名のみで実行 | スクリプトファイルが 環境変数PATH に含まれるディレクトリにある場合、ファイル名だけで実行できます。スクリプトには実行権限が必要です。 | script.sh |
シンプルなシェルスクリプトの例
シンプルなシェルスクリプトを作成します。
テキストエディタ(nanoエディタ)などで「hello.sh
」を作成します。
・「nano hellow.sh
」コマンドを実行します。
user01@ubuntu-vm:~$ nano hello.sh
「Ctrl + S
」 を押して、内容を保存して「Ctrl + X
」 を押して nano
を終了します。
シェルスクリプトの例:hello.sh
#!/bin/bash
# "Hello, World!" を表示
echo "Hello, World!"
➊bashコマンドでの実行
bash
コマンドを使ってシェルスクリプトを実行する方法です。スクリプトに実行権限がなくても実行できます。ログインシェルに設定されているシェル変数を参照しないでシェルスクリプトが実行されます。
【構文】bash スクリプト名.sh
・「bash hello.sh
」コマンドを実行します。
user01@ubuntu-vm:~$ bash hello.sh
Hello, World!
bashコマンドの主なオプション
オプション | 説明 |
---|---|
-x | 変数の展開や制御文を表示します。 |
-v | スクリプトの内容をそのまま表示します。 |
➋sourceコマンドでの実行
source
コマンドを使ってシェルスクリプトを実行すると、スクリプト内の変数や関数が現在のシェル環境に影響を与えます。
【構文】souce スクリプト名.sh
または. スクリプト名.sh
以下のコマンドを実行します。
- 「
source hello.sh
」コマンド - 「
. hello.sh
」コマンド
このコマンドは hello.sh
スクリプトを現在のシェルで実行します。スクリプト内で設定された変数や関数は、実行後も現在のシェル環境で利用可能です。
user01@ubuntu-vm:~$ source hello.sh
Hello, World!
# または
user01@ubuntu-vm:~$ . hello.sh
Hello, World!
source
コマンドでシェルスクリプトを実行した場合、特殊な変数 $$
を使ってPIDを確認できます。
・「echo $$
」コマンドを実行します。
# 現在のシェルのPIDを表示します
user01@ubuntu-vm:~$ echo $$
3998
❸ファイルパスを指定して実行
スクリプトファイルのパスを直接指定して実行する方法です。スクリプトに実行権限が必要です。スクリプトを実行する前に「chmod」コマンドで実行権限を与えておく必要があります。
【構文】
$ ./スクリプト名.sh
または$ ファイルパス/スクリプト名.sh
・「chmod a+x hello.sh
」コマンドでシェルスクリプトに実行権を与え、「ls -l hello.sh
」コマンドでパーミッションを確認します。
user01@ubuntu-vm:~$ chmod a+x hello.sh
user01@ubuntu-vm:~$ ls -l hello.sh
-rwxrwxr-x 1 user01 user01 61 6月 24 00:36 hello.sh
以下のコマンドを実行します。
- 「
./hello.sh
」コマンド - 「
/home/user01/hello.sh
」コマンド
「./hello.sh
」コマンドは、カレントディレクトリにある hello.sh
スクリプトを実行します。また、「/home/user01/hello.sh
」コマンドは、ファイルパスを指定して、 hello.sh
スクリプトを実行します。
user01@ubuntu-vm:~$ ./hello.sh
Hello, World!
# または
user01@ubuntu-vm:~$ /home/user01/hello.sh
Hello, World!
➍スクリプトファイル名のみで実行
スクリプトファイルが 環境変数PATH
に含まれるディレクトリにある場合、ファイル名だけで実行できます。これにより、簡単にスクリプトを実行できます。
【構文】$ スクリプト名.sh
スクリプトの実行するには、スクリプトに実行権限があり、環境変数PATH
にディレクトリが含まれている必要があります。スクリプト「hello.sh
」には既に実行権限を与えているため、環境変数PATH
に新しいパスを追加するだけです。
/home/user01
ディレクトリにスクリプトを作成したため、以下のコマンドで 環境変数PATH
を設定します。(※追加するディレクトリはスクリプトを作成したディレクトリ)
・「export PATH=$PATH:/home/user01
」コマンドを実行します。
user01@ubuntu-vm:~$ export PATH=$PATH:/home/user01
これで、スクリプトを実行する準備が整いました。
・「hello.sh
」コマンドを実行します。
このコマンドは 環境変数PATH
に含まれるディレクトリにある hello.sh
スクリプトを実行します。
user01@ubuntu-vm:~$ hello.sh
Hello, World!
シェルスクリプトの削除
この演習で作成したシェルスクリプトを削除します。
・「rm hello.sh
」コマンドを実行し、「ls
」コマンドで削除されたことを確認します。
user01@ubuntu-vm:~$ rm hello.sh
user01@ubuntu-vm:~$ ls
snap テンプレート ドキュメント ピクチャ 公開
ダウンロード デスクトップ ビデオ ミュージック
まとめ
シェルスクリプトの実行方法には様々な方法があります。以下の表でまとめたように、目的や環境に応じて適切な方法を選択することが重要です。
方法 | 説明 | 使用例 |
---|---|---|
bash コマンドでの実行 | bash コマンドを使用してスクリプトを実行します。 | bash script.sh |
source コマンドでの実行 | source コマンドを使用してスクリプトを実行します。スクリプト内の変数が現在のシェルに影響を与えます。 | source script.sh |
ファイルパスを指定して実行 | スクリプトファイルのパスを直接指定して実行します。スクリプトに実行権限が必要です。 | ./script.sh |
スクリプトファイル名のみで実行 | スクリプトファイルが 環境変数PATH に含まれるディレクトリにある場合、ファイル名だけで実行できます。スクリプトには実行権限が必要です。 | script.sh |
bashコマンドでの実行とsourceコマンドでの実行の違い
項目 | bashコマンドでの実行 | sourceコマンドでの実行 |
---|---|---|
実行方法 | bash script.sh | source script.sh または . script.sh |
実行環境 | 新しいサブシェルで実行 | 現在のシェル環境で実行 |
環境変数の影響 | スクリプト内で設定された変数はサブシェルに限定 | スクリプト内で設定された変数は現在のシェル環境に反映 |
スクリプトの終了後の影響 | スクリプト内で設定された変数や変更は元のシェルに影響しない | スクリプト内で設定された変数や変更は元のシェルに影響する |
実行権限 | スクリプトに実行権限が不要 | スクリプトに実行権限が不要 |
スクリプトの終了方法 | サブシェルの終了でスクリプトが終了 | 現在のシェルの終了でスクリプトが終了 |
主な用途 | 独立した環境でスクリプトを実行したい場合に使用 | 環境変数や関数を現在のシェルに影響させたい場合に使用 |