HEARTBEATS

こんにちは。CTOの馬場です。

今回もインフラエンジニア向けにちょっとした情報を紹介します。

今回は「覚えておきたいbashシェルスクリプトのオプション」です。

便利なものを3つ紹介します。

これを覚えておけば、シェルスクリプトとの付き合いが楽になること間違いなし!

その1: eオプション

まず1つめはeオプションです。

使い方としては
bash -e shellscript.sh
のように使います。

このオプションの効果ですが、man bashによると

-e オプションが与えられた場合、返り値は最後に実行されたコマンドの返り値となるか、あるいはコマンドの一時ファイルでエラーが起きた場合には偽となります。2番目の形式を用いた場合、終了ステータスは再実行されたコマンドの終了ステータスとなります。

とのこと。。。よくわかりませんね。

平たく言うと、シェルスクリプトの一連の動作の中でエラー(exit codeが0以外)が発生した場合に、 そこで 終了してエラーを報告 してくれます。
これはシェルスクリプト群でのエラー処理に活用できます。

子シェル・孫シェルを使えば、 エラーが起きたら処理を中断してエラー処理(メールするなど)なども簡単に書けます。

例(バッククォートがうまく出なくて全角にしてます):

#!/bin/bash

MAILTO="hoge@example.com"

RESULT=`bash -e main.sh` if [ $? -ne 0 ] then echo "${RESULT}"| mail -s "error at `hostname`" ${MAILTO} fi

その2: xオプション

2つめはxオプションです。

これは
bash -x shellscript.sh
のように使います。

このオプションの効果ですが、man bashによると

-x 単純なコマンドをそれぞれ展開した後、PS4を展開した値を表示し、その後にそのコマンドと展開した引き数を表示します。

とのこと。。。やっぱりよくわかりませんね。

これは一言でいうと デバッグモード です。
シェルスクリプトで実行した結果を逐一表示してくれます。
実行してみれば、ぱっとみで何が起きているかすぐわかるので、ぜひやってみて体験してください。

その3: norcオプション

3つめはnorcオプションです。

このオプションの効果ですが、man bashによると

--norc シェルが対話的動作を行う場合に、個人用初期化ファイル ~/.bashrc の読み込み・実行を行いません。シェルがshとして起動された場合には、このオプションはデフォルトで有効になります。

とのこと。

動作環境を安定させる意味でも、設定が環境に影響されるのは避けたいところです。
このnorcオプションとrcfileオプションを適切に指定することで、 安定した環境でシェルスクリプトを動作させる ことができます。

ここでは3つ紹介しましたが、他にも便利なオプションがいっぱい!
続きは man bash してくださいね!

株式会社ハートビーツの技術情報やイベント情報などをお届けする公式ブログです。