シェルスクリプトを実行する時に困った事はありませんか?
- 「実行権限がありません」
- 「コマンドが見つかりません」
上記のようなメッセージが出て、シェルスクリプトを実行するときに戸惑った人も多いと思います。
そこで今回はシェルスクリプトを実行する色々な方法を記事にしました。
それぞれの特徴と掴んで最適なシェルスクリプト実行方法を選べば、効率よく作業する事が可能になります。
windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。
シェルスクリプトを実行する方法
シェルスクリプトでコマンド実行する方法は以下です。
- 実行権を与えて相対パスでシェルスクリプトを実行する
- bashコマンドでシェルスクリプトを実行する
- sourceコマンドでシェルスクリプトを実行する
一つ一つ見ていきます。
実行権を与えて相対パスでシェルスクリプトを実行する
実行権を与えて相対パスでシェルスクリプトを実行する
一番は本来のシェルスクリプトに実行権限を与えて相対パスで指定する事です。
相対パスでシェルスクリプトを実行する手順
手順は以下の通りです
以下のシェルスクリプトを作成してください。
vi シェルスクリプト
以下のコマンドでシェルスクリプトに実行権限を与えます。
chmod +x シェルスクリプト
以下のコマンドでシェルスクリプトを実行します
./シェルスクリプト
相対パスでシェルスクリプトを実行してみる
実際にシェルスクリプトを作成して実行してみます。
以下のシェルスクリプトを作成しました。
#!/bin/bash
message='シェルスクリプト実行しました!'
echo $message
「ls -l」コマンドで現ディレクトリをみてみます。
ここで一度相対パスで実行してみます。
[root@localhost workspace]# ./shell_script_execution.sh
-bash: ./shell_script_execution.sh: 許可がありません
「許可がありません」と出て実行できません。
シェルスクリプトで実行できない場合の対処法
「ls -l」コマンドで確認してみましょう。
「x」がないので実行権限がありません。
実行権限を付けてみましょう。
[root@localhost workspace]# chmod +x shell_script_execution.sh
もう一度見てみましょう。
すべてに「x」(実行権限)が付与されて、ファイルが緑色になりました。
シェルスクリプトを実行します。
[root@localhost workspace]# ./shell_script_execution.sh
シェルスクリプト実行しました!
シェルスクリプトを相対パスで実行する事が出来ました。
これが一般的なやり方になります。
しかしシェルスクリプトを試したりするのに、実行権限などをいちいちつけるのは面倒です。
bashコマンドでシェルスクリプトを実行する
次は「bash」コマンドの後にシェルスクリプトを書く方法です。
bashコマンドで実際にシェルスクリプトを実行してみる
もう一度同じ内容のシェルスクリプトを作成します。
シェルスクリプト名を「shell_script_execution2.sh」としました。実行権限はありません。
[root@localhost workspace]# ls -l
合計 8
-rwxr-xr-x. 1 root root 84 4月 6 21:57 shell_script_execution.sh
-rw-r--r--. 1 root root 84 4月 6 22:28 shell_script_execution2.sh
bashコマンドでシェルスクリプトを実行します
[root@localhost workspace]# bash shell_script_execution2.sh
シェルスクリプト実行しました!
実行できました。
bashコマンドでは権限が不要で実行できるので、テストや開発ではこちらがオススメです。
sourceコマンドでシェルスクリプトを実行する
今度は「source」コマンドでシェルスクリプトを実行してみます。
前と同じく実行権のないシェルスクリプトを実行してみます。
[root@localhost workspace]# source shell_script_execution2.sh
シェルスクリプト実行しました!
こちらでも実行できました。
また「source」コマンドは「.」に省略できます。実行してみます。
[root@localhost workspace]# . shell_script_execution2.sh
シェルスクリプト実行しました!
こちらでも実行できています。
sourceコマンドで実行する時の注意点
「bash」コマンドとの違いは現bashシェルで動くので、変数や関数などが保存されます。
先程のファイルで変数「message」を使用していました。
こちらの変数の値が残っているか「echo $message」で試してみます。
[root@localhost workspace]# echo $message
シェルスクリプト実行しました!
$message変数に入っていた「シェルスクリプトを実行しました!」という文字が残っています。
setコマンドで何が残っているか確認出来ます。
[root@localhost workspace]# set
省略~
message=シェルスクリプト実行しました!
元々設定されている値がほとんどですが、最後に「message」変数がはいっていました。
削除したい場合は「unset」コマンドで可能です。
[root@localhost workspace]# unset message
setコマンドで確認
~省略~
XDG_SESSION_ID=122
_=message
colors=/root/.dircolors
[root@localhost workspace]#
「message」変数が消えていました。
シェルスクリプトを実行する方法のまとめ
シェルスクリプトでコマンド実行する方法は以下です。
- 実行権を与えて相対パスでシェルスクリプトを実行する
- bashコマンドでシェルスクリプトを実行する
- sourceコマンドか.(省略形)でシェルスクリプトを実行する
それぞれの特徴を以下にまとめます。
実行方法 | 実行環境 | 使うべき環境 | メリットデメリット |
---|---|---|---|
相対パスで実行 | カレントシェルの 子プロセス | 運用環境 | 権限付与が面倒 |
bashコマンドで実行 | カレントシェルの 子プロセス | テストや開発 | 気軽に試せる |
sourceコマンドか .(省略形) で実行 | カレントシェル | テストや開発で 変数なども残したい | 変数などが残り、運用と違う動きをする可能性あり |