こんにちは。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
してくださいね!