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中检查时,它的值不正确。如何将其传递出去?
答案 0 :(得分:1)
只需在顶部声明CURRENT_OPTION
,例如:
declare -i CURRENT_OPTION=0
i
将其声明为int
。
答案 1 :(得分: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
语句有足够的参数(第一个是空字符串)来解析。