스크립트에 오류가 발생했습니다.
#!/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 test
man [
당신이 원하는 것은산술 평가:
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