How to get the total physical memory in Bash to assign it to a variable?

grep MemTotal /proc/meminfo | awk '{print $2}'  

The returned number is in KB


I came up with this one under the assumption, that the physical memory will be the first number in free's output:

free -m | grep -oP '\d+' | head -n 1

This allows you to configure free to output the unit you want (-m, -g, ...) and it is independent of the system language (other answers depend on the "Mem:" string in free's output which may change based on the language).


phymem=$(awk -F":" '$1~/MemTotal/{print $2}' /proc/meminfo )

or using free

phymem=$(LANG=C free|awk '/^Mem:/{print $2}')

or using shell

#!/bin/bash

while IFS=":" read -r a b
do
  case "$a" in
   MemTotal*) phymem="$b"
  esac
done <"/proc/meminfo"
echo $phymem

Tags:

Bash