2012-11-19 39 views
1

如果我们可以在Perl中执行此操作也可以。 我不知道这是否可能,但这是我想要做的。我想获得的内存的内存百分比正在使用(有可能是这样做的更好的方法,请让我知道)设置一个Bash命令返回为变量

我有这样的bash命令

free -m | grep "Mem: " | awk '{print ($3/$2)*100}' 

这将返回一个数字,但我想要做的是为命令的输出设置一个变量。

So var1= Output of the above command 

回答

5

我相信这是你在找什么:

var1=$(free -m | grep "Mem: " | awk '{print ($3/$2)*100}') 

说明:在外壳

  • $(...)语法称为命令替换。
  • 它产生一个子shell来执行圆括号内的任何内容,然后返回打印到该子外壳内的任何东西stdout

旁白:

替代语法与反引号:

var1=`free -m | grep "Mem: " | awk '{print ($3/$2)*100}')` 

,但它不是由于可读性和嵌套问题的首选方法。

+0

谢谢,这正是我一直在寻找。我忘了在命令前添加“$”。我把括号括起来,但没有$。再次感谢。 – jenglee

+0

@jenglee:很高兴帮助=) –

0

您可以在命令中使用反引号:

export var=`command` 
+0

我的版本的bash不喜欢变量赋值中'='的空格。 – benrifkah

+0

没错,没有空格 – Jacopofar

+1

@Jackopo你可以编辑你的答案来纠正错误。 – Lynch

4

你并不需要使用grep,如果您正在使用awk。您可以简化您的命令:

var1=$(free -m | awk '/Mem:/{print ($3/$2)*100}') 
+1

好抓! +1 =) –

0

如果你使用的是Linux(或者任何Unix兼容的/ proc接口),你可以使用的内存%这样:

var1=$(perl -ne '/(\w+):\s*(\d+)/ and ($mem{$1} = $2) }{ printf "%0.2f", 100 - 100 * $mem{MemFree}/$mem{MemTotal}' /proc/meminfo) 

注意一般是一个好主意,减去缓冲区高速缓存&(OS缓存往往以填补所有可用的RAM):

var2=$(perl -MList::Util=sum -ne '/(\w+):\s*(\d+)/ and ($mem{$1} = $2) }{ printf "%0.2f", 100 - 100 * sum(@mem{qw{Buffers Cached MemFree}})/$mem{MemTotal}' /proc/meminfo) 
相关问题