设为首页 加入收藏

TOP

基础shell编程
2023-07-23 13:42:18 】 浏览:25
Tags:基础 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

结果如下:

 

 

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

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇BIO和NIO的区别和原理 下一篇在OpenEuler22.09(也适用于CentO..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目