题目:监控内存剩余空间,小于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
结果如下:
一对中括号和两对中括号的结果不一样,所以我一开始的结果就是错的。。。。。