2012-11-19 40 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) 
相關問題