Bashから2つの変数を減算するには?

Bashから2つの変数を減算するには?

スクリプトでエラーが発生しました。

#!/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

文法は[ ... ]実際に注文する、シェルにはまったく特別なものはありません。これはコマンドの別の名前です。 justをtest参照してください。man testman [

あなたが望むもの算術評価:

delete="$((size-value))"

コードで何が起こるのかは、変数に割り当てられた値を引用しなかったため、行全体がシェルによって単語に分割されることです。

delete=[
"$size"
-
"$value"
]

これらの最初のものは変数の代入として扱われ、文字列を"["変数に代入すると、残りはdeleteコマンドとして扱われます。

78(の拡張"$size")は有効なコマンドではないため、シェルでエラーが発生します。

答え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

関連情報