如何获得Bash中的总物理内存将其分配给变量?
grep MemTotal /proc/meminfo | awk '{print $2}'
返回的数字是KB
看来你已经回答了你自己的问题。不过,使用一个awk命令来完成这项工作。 'awk'/ MemTotal/{print $ 2}'/ proc/meminfo' – ghostdog74 2010-03-14 04:53:10
要包含转换到不同的基础(例如GB),您可以使用'grep MemTotal/proc/meminfo | awk'{print $ 2}'| xargs -I {} echo“scale = 4; {}/1024^2”| bc' – turtlemonvh 2015-05-13 14:12:59
如何
var=$(free | awk '/^Mem:/{print $2}')
分配变量时,在“=”符号之间不能有空格。尽可能使用'$()'语法。 – ghostdog74 2010-03-14 04:52:15
@ ghostdog74:谢谢(后固定) – kiwicptn 2010-03-14 05:01:08
grep _and_ awk? – 2010-03-16 09:57:29
phymem=$(awk -F":" '$1~/MemTotal/{print $2}' /proc/meminfo)
,或者使用免费
phymem=$(free|awk '/^Mem:/{print $2}')
或使用shell
#!/bin/bash
while IFS=":" read -r a b
do
case "$a" in
MemTotal*) phymem="$b"
esac
done <"/proc/meminfo"
echo $phymem
我喜欢这一个,因为你可以传递'-m','-g'等,以'free'来获得它在不同的单位:) – 2012-09-02 20:21:10
非常好的总结答案,谢谢。更进一步,我会改变适当的行到'而读-r a b c'来剥离单位。 – dess 2016-03-03 10:57:17
傻傻的内联python版本,看起来过于复杂,但实际上是有用的。
freemem=$(echo -e 'import re\nmatched=re.search(r"^MemTotal:\s+(\d+)",open("/proc/meminfo").read())\nprint(int(matched.groups()[0])/(1024.**2))' | python)
它以GB返回内存。
我认为你的're.search(r“^ MemTotal ...”)有''r'' – kd88 2015-10-12 14:05:19
@ kd88我认为没关系。这只是python中的一个原始字符串的符号。请参阅正则表达式文档的介绍部分以获得解释:https://docs.python.org/2/library/re.html – turtlemonvh 2015-10-13 14:47:08
我想出了这样一个假设下,即物理内存将是免费的输出的第一个数字:
free -m | grep -oP '\d+' | head -n 1
这允许您配置自由输出你想要的单元(-m, -g,...),它与系统语言无关(其他答案取决于免费的输出中的“Mem:”字符串,它可能会根据语言而改变)
这个问题的意义很小。 – Gabe 2010-03-14 03:11:54
我刚刚重写了它,对我来说这是非常具体的,我必须得到我的电脑的总物理内存(RAM)并分配它在我的bash脚本中是一个变量。 – Neuquino 2010-03-14 04:48:34