Bash에서 두 변수를 빼는 방법은 무엇입니까?

Bash에서 두 변수를 빼는 방법은 무엇입니까?

스크립트에 오류가 발생했습니다.

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

관련 정보