シェルスクリプトだけではないですが、スクリプトファイルのファイル名やスクリプトが設置されたディレクトリのパスを取得したいときってありますよね。
今回はシェルスクリプトでファイルパスとディレクトリのパスを取得する方法を説明します。
環境は、CentOS7.4 です。
シェルスクリプトのディレクトリ名を取得する
まずは、シェルスクリプトが設置されたディレクトリ名を取得する方法です。
例えば、/home/hoge/tools/backup.sh というスクリプトであれば、/home/hoge/tools というパスが取得できます。
1 |
echo $(cd $(dirname $0);pwd) |
実行してみると、以下のようになります。
1 2 3 4 5 |
# pwd /home/hoge/tools # sh dirname.sh /home/hoge/tools |
シェルスクリプトのファイル名を取得する
続いて、ファイル名を取得するコマンドです。
1 |
echo $(realpath "$0") |
実行してみると、以下のようになります。
1 2 3 4 5 6 7 8 |
# pwd /home/hoge/tools # ls filename.sh # sh filename.sh /home/hoge/tools/filename.sh |
まとめ ~使用例~
具体的な使用例をあげると、、、
メール通知にスクリプト名を記載
スクリプトでメール通知するときに、メールを受信した方は何だこのメールは??どっから送られてきたん??
と頭を悩ませることになるので、送られるメールの本文にスクリプトのパスやIP、ホスト名位は記載しておくと後任は助かります。こういうのってだいたい忘れた頃に送られてきて、実装した担当者は退職しているっているパターンが多いしね。
使い方を記載するとき
これは、スクリプトを実行するときに、スクリプト単体で実行するでなく、引数が必要なときなどに助かります。
実行してもうまくいかない、正常に動いている気配がない。。。といって頭を悩ませることがなくなります。中見て。って感じもしますが。例えば処理対象の日付を引数に与えて実行しないといけないときなんかは以下のように記述するとよいかも。
1 2 3 4 5 6 |
if [ $# = 0 ]; then echo "Usage : $(realpath "$0") yyyymmdd" exit 1 fi echo "Today is $1" |
引数を与えずに実行すると以下のように、使い方が表示される。
1 2 |
$ sh hoge.sh Usage : /home/hoge/hoge.sh yyyymmdd |
想定通りの動きとなるように引数を与えると以下。
1 2 |
$ sh hoge.sh 20181515 Today is 20180515 |
基本といえば基本ですが、いつもbasenameだったかな~とかいいながらぐぐるのでメモを残します。
以上です。
↓↓↓ 持っていると便利な一冊。