1
if [[ $line == *"option 1"* ]]
then
     CURRENT_OPTION=1
fi

if [[ $line == *"option 2"* ]]
then
     CURRENT_OPTION=2
fi

if [[ $line =~ "What i want" ]]
then            
    if [[ $CURRENT_OPTION -eq 1 ]]
    then
        MEM1=$(awk '/Used heap/ { gsub(/M/, " "); print $4 }')
    elif [[ $CURRENT_OPTION -eq 2 ]]
    then
        MEM2=$(awk '/Used heap/ { gsub(/M/, " "); print $4 }')
    fi
fi

CURRENT_OPTION は if 内で定義されているため、3 番目の if でチェックすると、その値は正しくありません。どうすればそれを渡すことができますか?

4

2 に答える 2

1

CURRENT_OPTION上部で次のように宣言するだけです。

   declare -i CURRENT_OPTION=0

iとして宣言しintます。

于 2012-10-05T11:15:17.877 に答える
0

すべてのifステートメントで、変数を二重引用符で囲む必要があります。変数が空の文字列の場合 (または変数が存在しない場合)、if ステートメントには十分な引数が含まれず、エラーがスローされます。

次に例を示します。

if [[ $var -eq 1 ]]
then 
    echo yes
else
    echo no
fi

が初期化されていない場合var、bash はステートメントを次のように展開します。

if [[ -eq 1 ]]
then 
    echo yes
else
    echo no
fi

ifここでは、ステートメントを有効にするのに十分な引数がありません。bash はエラーをスローします。

bash: conditional binary operator expected
bash: syntax error near `1'

変数を引用符で囲むことにより、この状況を回避できます。この文:

if [[ "$var" -eq 1 ]]
...

次のように展開されます。

if [[ "" -eq 1 ]]
...

これで、ifステートメントには解析するのに十分な引数 (最初の引数は空の文字列) が含まれています。

于 2012-10-15T12:37:52.537 に答える