2011-10-19 17 views
1

環境変数をチェックし、変数が設定されていない場合にログファイルに書き込むシェルスクリプトを書くにはどうすればよいですか?環境変数が設定されていない場合のログ記録方法は?

+0

スクリプト内から$ varをエコーすることができます。私はヌルなどのためのリターン文字列をチェックする。それは非常に扱いにくく、ハッキーに見える。 – xyz

+0

[unix&linux](http://unix.stackexchange.com/q/22904/4667)でも尋ねられる –

答えて

4

それが設定されていないときにのみ、その後、メッセージをしたい場合:

if [ -z "${CHOSEN_ENV_VAR}" ] 
then echo "CHOSEN_ENV_VAR was not set but should have been" >> log.file 
fi 

あなたは、単にスクリプトが停止し、標準エラー出力に報告したい場合は、:

: ${CHOSEN_ENV_VAR:?'was not set but should have been'} 

(あなたがテストすることができます対話シェルは終了しませんが、対話シェルは終了しません。スクリプトに入れてスクリプトを終了してください)

+0

私は彼が省略すべきだと思う2番目の例の(2番目の) ':'のように、 ':? 'は変数の設定を解除するだけでなく、NULL変数をチェックします。コロン・テストを省略すると、設定されていない場合のみテストされます。 (最初の例と同じ問題があり、空でないかどうかを確認するだけです) – flolo

+0

はい - これまでは空のenv varを必要としていたことはほとんどありませんでした。それは通常、問題を示しています。 '[-n" $ {CHOSEN_ENV_VAR + X} "]'でトリックを実行して、未設定の環境変数を検出することもできます。この表記法は、CHOSEN_ENV_VARが設定されていない場合はXを生成します。 –

3

ログに書き込むコマンドはloggerです。 そして、あなた変数がtest -vに設定されている場合は、あなたのスクリプトで使用すると、ライン持っている必要がありますので、テスト:

if test ! -v VARNAME; then logger Variable VARNAME is unset; fi 

EDIT:ケースでログにちょうど任意のログファイルではなく、システムログを意味し、もちろん、ロガーをecho bla bla> log.fileに置き換えることもできます。

0

[ -z "$name" ]は、nameが空であるかどうかを確認します。設定されていないかどうかをテストするには、[ -z "${name+isset}" ]を使用します。

check() { 
    if [ -z "${name+isset}" ]; then 
    echo "name is unset" 
    elif [ -z "$name" ]; then 
    echo "name is empty" 
    else 
    echo "name is non-empty" 
    fi 
} 
name=me; check name 
name=; check name 
unset name; check name 
関連する問題