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 中定义的,所以在第三个 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 回答