![如何在 bash 中减去两个变量?](https://linux22.com/image/88418/%E5%A6%82%E4%BD%95%E5%9C%A8%20bash%20%E4%B8%AD%E5%87%8F%E5%8E%BB%E4%B8%A4%E4%B8%AA%E5%8F%98%E9%87%8F%EF%BC%9F.png)
我在脚本中遇到错误:
#!/bin/bash
value='55'
size=`df -kh | grep '/vol/cdr/MCA' | awk '{print $5}'| sed 's/%//g'`
if [ "$size" -gt "$value" ] ;
then
delete=[ "$size" - "$value" ]
echo $delete
fi
输出:
[root@rohit ~]# sh -x test.sh
+ value=55
++ df -kh
++ grep /vol/cdr/MCA
++ awk '{print $5}'
++ sed s/%//g
+ size=78
+ '[' 78 -gt 55 ']'
+ delete='['
+ 78 - 55 ']'
test.sh: line 6: 78: command not found
+ echo
答案1
语法[ ... ]
实际上是一个命令,对于 shell 来说根本没有什么特别的。它是该命令的另一个名称test
- seeman test
甚至只是man [
。
你想要的是算术评估:
delete="$((size-value))"
您的代码中发生的情况是,由于您没有引用分配给变量的值,因此整行被 shell 分割成单词:
delete=[
"$size"
-
"$value"
]
其中第一个被处理为变量赋值,将字符串分配"["
给变量delete
;其余部分将被视为命令。
由于 78( 的扩展"$size"
)不是有效命令,因此 shell 会抛出错误。
答案2
你正在尝试做数学吗?在这种情况下,请替换:
delete=[ "$size" - "$value" ]
和
delete=$(($size-$value))
答案3
value=55
size=42
declare -i result # set integer attribute
result=$value-$size
echo $result
输出:
13
答案4
区分实数正数
diff_real () {
echo "df=($1 - $2); if (df < 0) { df=df* -1}; print df" | bc -l;
}
用法
var_a=10
var_b=4
output=$(diff_real $var_a $var_b)
# 6
#########
var_a=4
var_b=10
output=$(diff_real $var_a $var_b)
# 6