Команда alias
завершается со статусом 0 и выводит определение именованного псевдонима:
$ alias ls
alias ls='ls -G'
$ echo $?
0
Если псевдоним не определен, в стандартную ошибку выводится ошибка, а alias
завершается со статусом 1:
$ alias foo
bash: alias: foo: not found
$ echo $?
1
Вы можете сделать что-то вроде:
memory=$(
LC_ALL=C free -h | awk '
/^Mem/ {
suffix = $2
sub(/[0-9.]*/, "", suffix)
printf "%.0f%sB\n", $2, suffix
}'
)
(LC_ALL=C
чтобы убедиться, что числа печатаются с использованием .
десятичной системы счисления (3.7G будет выводиться как 3,7G в локалях с использованием запятой в качестве десятичной системы счисления )).
В системах GNU/Linux вы также можете:
memory=$(
awk '/^MemTotal/{print $2*1024}' < /proc/meminfo |
numfmt --to=iec --format=%0f --suffix=B
)
Или:
memory=$(
free -h | awk '/^Mem/{print $2}' |
numfmt --from=iec --to=iec --format=%0f --suffix=B
)
(что один справляется с локалями, где десятичная система счисления не.
).
Обратите внимание, что free
в Linux сообщает, что поле MemTotal
файла /proc/meminfo. Согласно proc (5 ), это общая используемая оперативная память (, т. е. физическая оперативная память минус несколько зарезервированных битов и двоичный код ядра). Для физической оперативной памяти и для ПК, как указал @StephenKit, вам может быть лучше использовать dmidecode
для получения информации из BIOS, хотя для этого вам потребуются привилегии суперпользователя:
physical_memory=$(
sudo dmidecode -t memory |
awk '$1 == "Size:" && $2 ~ /^[0-9]+$/ {print $2$3}' |
numfmt --from=iec --suffix=B |
awk '{total += $1}; END {print total}' |
numfmt --to=iec --suffix=B --format=%0f
)
Если вы хотите округлить до 2 знаков после запятой, вот несколько простых примеров:
echo "12345.12345" | nawk '{printf ("%.2f\n", $1+0.005)}'
echo "12345.345" | nawk '{printf ("%.2f\n", $1+0.005)}'