题目:监控内存剩余空间,小于10M则发出信号,给出错误代码,要求调试,如下:

#!/bin/bash#mem monitormem_size=$(free | awk ‘/mem /{print $4}’)if [$mem_size -le 102400]then  echo “warning: mem insufficient”fi

第一次调试代码:

#!/bin/bashmen_size=$(free | awk '/mem/{print $4}')declare -i num=102400if [ $men_size -le $num ]thenecho "空间不足!!"elseecho "一切正常!!"fi

运行结果:

虽然第二行可以出现结果,但第一行很明显无法让人忽略,一查“[: -le: 需要一元表达式”,说是

  1.当 if 语句中使用[ ]条件修饰符时,$men 变量必须加上引号。

  2.当 if 语句中使用[[ ]]条件修饰符时,$men 变量的引号可有可无。

用第一种试试:

#!/bin/bashmen_size=$(free | awk '/mem/{print $4}')declare -i num=102400if [ "$men_size" -le "$num" ]then          echo "空间不足!!" else          echo "一切正常!!"fi          

结果如下:

再查“[: : 需要整数表达式”,查到了下面的说法:

“-eq” 对整数进行比较

“==” 对字符串进行比较

这里类比一下”-le”和”<="不过分吧?这时我猜想if的两个比较对象加了引号应该是字符串了吧,所以"-le"就报错,这时候就没辙了(改了好久,都是这两个错误轮流出现),怎么改都不对,这时就需要上面一开始提到的第二种方法了,用两个中括号!!!

正确代码如下:

#!/bin/bashmen_size=$(free | awk '/mem/{print $4}')declare -i num=102400if [[ $men_size -le $num ]]thenecho "空间不足!!"elseecho "一切正常!!"fi

结果如下:

一对中括号和两对中括号的结果不一样,所以我一开始的结果就是错的。。。。。