Bash:如果没有';服务器上没有足够的内存

Bash:如果没有';服务器上没有足够的内存,bash,memory,Bash,Memory,我希望我的脚本回显一个字符串,以防服务器上没有足够的内存。我尝试了很多东西,但是脚本不起作用,恐怕是因为将字符串转换为数字 以下是我得到的: freem=`free -m | sed -n '3p' | tail -c6 | xargs` max_memory=1000 if [ freem -lt max_memory ] then echo 'not enough' else echo 'yay' fi freem确实具有正确的值,但如果不起作用,则表示: check_memory.sh:

我希望我的脚本回显一个字符串,以防服务器上没有足够的内存。我尝试了很多东西,但是脚本不起作用,恐怕是因为将字符串转换为数字

以下是我得到的:

freem=`free -m | sed -n '3p' | tail -c6 | xargs`
max_memory=1000
if [ freem -lt max_memory ]
then echo 'not enough'
else echo 'yay'
fi
freem确实具有正确的值,但如果不起作用,则表示:

check_memory.sh: 3: [: Illegal number: freem
我试过很多东西,但都不能成功

谁能帮帮我吗


谢谢你

fedorqui的答案已经显示出你遗漏了什么(变量名的$)。我会使用类似于:

let freem=$(free -m | awk '/cache:/ {print $NF}')
let max_memory=1000
if [ $freem -lt $max_memory ]
then echo 'not enough'
else echo 'yay'
fi

为了可读性,我更喜欢使用
$()
而不是反勾号。通过使用
说明arg是一个算术表达式,这在比较值时更有意义。

您只需要使用
$var
而不是
var
。在您的情况下,
如果[$freem-lt$max\u memory]
。好的,谢谢。但快速提问,let在bash脚本(.sh)中似乎不起作用,这是为什么?(我刚刚删除了它,它似乎起作用)这很奇怪。在我的系统上,bash与
let
没有任何问题。您使用的是哪个版本的bash?(我在bash 3.2.25和4.1.2上试用过)。4.2.45(最新的ubuntu).尽管我不明白那部分的意思,但没关系,它是有效的,这才是最重要的。谢谢你的帮助:)