基础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

结果如下:

 

 

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

posted @ 2022-12-04 21:16  wazjr  阅读(138)  评论(0编辑  收藏  举报