我创建了一个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}"
但是脚本的输出只是
-
如何进行减法工作?
答案 0 :(得分:13)
通过将表达式包装在$((
和))
中,您可以在bash中执行基本的整数数学运算。
$ echo $(( 5 + 8 ))
13
在您的具体情况下,以下内容适用于我:
$ echo "${new_size}-${current_size}"
802-789
$ echo $(( ${new_size}-${current_size} ))
13
你最后的输出有点奇怪。检查grep表达式是否实际产生了所需的输出。如果没有,您可能需要将正则表达式包装在引号中。
答案 1 :(得分:1)
你不需要调出grep来删除字符串中的字母:
current_remote_dir_size=789M
current_size=${current_remote_dir_size%[A-Z]}
echo $current_size # ==> 789
new_remote_dir_size=802M
new_size=${new_remote_dir_size%[A-Z]}
echo $new_size # ==> 802
请参阅bash手册中的Shell Parameter Expansion。
答案 2 :(得分:1)
您只需要:
echo $((${new_remote_dir_size/M/}-${current_remote_dir_size/M/}))
man bash
,节字符串替换。