基础shell编程
题目:监控内存剩余空间,小于10M则发出信号,给出错误代码,要求调试,如下:
#!/bin/bash #mem monitor mem_size=$(free | awk ‘/mem /{print $4}’) if [$mem_size -le 102400] then echo “warning: mem insufficient” fi
第一次调试代码:
#!/bin/bash men_size=$(free | awk '/mem/{print $4}') declare -i num=102400 if [ $men_size -le $num ] then echo "空间不足!!" else echo "一切正常!!" fi
运行结果:
虽然第二行可以出现结果,但第一行很明显无法让人忽略,一查“[: -le: 需要一元表达式”,说是
1. 当 if 语句中使用 [ ] 条件修饰符时, $men 变量必须加上引号。
2. 当 if 语句中使用 [[ ]] 条件修饰符时,$men 变量的引号可有可无。
用第一种试试:
#!/bin/bash men_size=$(free | awk '/mem/{print $4}') declare -i num=102400 if [ "$men_size" -le "$num" ] then echo "空间不足!!" else echo "一切正常!!" fi
结果如下:
再查“[: : 需要整数表达式”,查到了下面的说法:
"-eq" 对整数进行比较
"==" 对字符串进行比较
这里类比一下"-le"和"<="不过分吧?这时我猜想if的两个比较对象加了引号应该是字符串了吧,所以"-le"就报错,这时候就没辙了(改了好久,都是这两个错误轮流出现),怎么改都不对,这时就需要上面一开始提到的第二种方法了,用两个中括号!!!
正确代码如下:
#!/bin/bash men_size=$(free | awk '/mem/{print $4}') declare -i num=102400 if [[ $men_size -le $num ]] then echo "空间不足!!" else echo "一切正常!!" fi
结果如下:
一对中括号和两对中括号的结果不一样,所以我一开始的结果就是错的。。。。。