在shell脚本中减去字符串(即数字)

hao*_*ike 5 math bash shell

我创建了一个shell脚本,用于查找目录的大小,以人类可读的格式返回(例如,802M或702K).我想计算尺寸之间的差异.

到目前为止,这是我的shell脚本:

#!/bin/bash

current_remote_dir_size=789M
new_remote_dir_size=802M
new_size=`echo ${new_remote_dir_size} | grep -o [0-9]*`
current_size=`echo ${current_remote_dir_size} | grep -o [0-9]*`

echo "${new_size}-${current_size}"
Run Code Online (Sandbox Code Playgroud)

但是脚本的输出才是

-
Run Code Online (Sandbox Code Playgroud)

如何减法工作?

Dan*_*eck 13

您可以通过将表达式包装在$((和中来执行bash中的基本整数数学运算)).

$ echo $(( 5 + 8 ))
13
Run Code Online (Sandbox Code Playgroud)

在您的具体情况下,以下内容适用于我:

$ echo "${new_size}-${current_size}"
802-789
$ echo $(( ${new_size}-${current_size} ))
13
Run Code Online (Sandbox Code Playgroud)

你最后的输出有点奇怪.检查grep表达式是否实际产生了所需的输出.如果没有,您可能需要将正则表达式包装在引号中.

  • 您还可以使用以下语法执行aritmethic操作:`echo $ [5 + 8]`和变量:`echo $ [new_size + current_size]`. (2认同)