在 Debian Linux shell 中,我尝试添加两个单独命令的结果,以便知道两者的总和。
我已经尝试过:
echo $(expr $(du -sh /srv/mysql) + $(du -sh /srv/www))
及其变体。
它返回:expr:
“语法错误:意外的参数'/srv/mysql'
”
当然我也尝试解释文件夹等。
答案1
像这样:
可以与任何 shell(bash、zsh、sh、dash...)一起使用
echo "$((
(
$(du -s /srv/mysql | awk '{print $1}') +
$(du -s /srv/www | awk '{print $1}')
) / 1024
))MiB"
或者简单地:
du -shc /srv/www /srv/mysql | awk 'END{print $1}'
作为-c
经营count
者
答案2
假设您正在处理整数......
我注意到这expr
被认为是过时的和过时的。它有两个主要用途,算术匹配和正则表达式匹配,这两种用途在大多数 shell 中都可用。
(顺便说一句,“Debian Linux shell”不仅仅是一件事;它可以是 Bash 或 Dash,或者实际上是随后添加或更改用户时选择的任何一个 shell。)
对于算术,POSIX 要求 shell(任何声称符合要求的 shell,包括/bin/sh
)来计算 $((表达)) 根据类似于 C 语言中整数表达式的规则,因此$((1+2*3))
应该给出 7。
原始问题的主要问题是输出中还包含数字之外的其他信息。首先要尝试的应该是要求生成这些数字的程序不要输出任何其他内容。仅当失败时,才过滤输出。有很多方法可以做到这一点,但最简单的就是
tr -dc 0-9
这将删除所有不是数字的内容。
如果您需要小数...
(小数分数通常是定点数,例如 1.23,但浮点系统也可以理解定点数,因此您可以使用其中任何一个。)
也expr
不能$((…))
处理小数。为此,您需要bc
或使用内置定点或浮点的单独脚本语言,例如awk
orperl
或python
。