教科書「Unixとシステム管理ハンドブック」に記載されているサンプルスクリプトについて質問があります。スクリプトは次のとおりです...というエラーが発生しますlogscript: line 8: [: 1: unary operator expected
。
# The log level is set in the global variable LOG_LEVEL. The choices
# are, from most to least severe. Error, Warning, Info, and Debug.
function logMsg {
message_level=$1
message_itself=$2
if [ $message_level -le $LOG_LEVEL ]; then
case $message_level in
0) message_level_text="Error";;
1) message_level_text="Warning";;
2) message_level_text="Info";;
3)message_level_text="Debug";;
*) message_level_text="Other"
esac
echo "${message_level_text}: $message_itself"
fi
}
# Main program starts here
logMsg $1 $2
このエラーが発生する理由のアイデアはありますか?
答え1
エラーはLOG_LEVEL
定義されていないために発生します。この機能を実行する方法(または使用しているシェルまたはオペレーティングシステム)に関する情報を提供していませんが、LOG_LEVEL
このエラーが設定されるとエラーは消えます。
たとえば、
$ foo=""; [ 1 -le $foo ] && echo yes
bash: [: 1: unary operator expected
同時に以下を$foo
設定した場合:
$ foo="1"; [ 1 -le $foo ] && echo yes
yes
答え2
説明が示すように、LOG_LEVEL
変数を設定し、整数を最初の引数として使用してスクリプトを呼び出す必要があります(if
整数はすぐに比較される予定です)。それは次のとおりです。
export LOG_LEVEL=3
./my_script 2 AnyMessage
答え3
次のことを試すことができます。
if [[ $message_level -le $LOG_LEVEL ]]