내가 시도한 것은 다음과 같습니다.
#!/bin/sh
res=`df | awk 'FNR == 2 { print $5 }'`
res2=$((res+0))
이건 내 잘못이야:
-bash: 53%: 구문 오류: 피연산자가 필요합니다("%"로 표시된 오류).
Google에서 "string to int bash"를 검색했는데 표시되었지만 $((res+0))
string()의 이유로 인해 작동하지 않았습니다. 이것을 다음과 같은(아직 유효한) if 문을 실행할 수 있는 방식으로 변환하려면 어떻게 해야 합니까?%
53%
if [ "$res2" -ge 50 ]
then
echo "Your disk >=50% full!"
fi
답변1
awk에게 억제하라고 지시하세요 %
.
#!/bin/sh
res=`df | awk 'FNR == 2 { sub("%","",$5); print $5 }'`
res2=$((res+0))
하지만 이 줄이 아무 것도 하지 않는 것을 볼 수 있습니다 res2
. 가 없으면 declare -i res2
bash는 여전히 이를 문자열로 처리합니다. 다음을 수행할 수 있습니다.
if [ $res -ge 50 ]; then
echo "Your disk >= 50% full!"
fi
답변2
일부 변수 작업도 가능합니다:
res=`df | awk 'FNR == 2 { print $5 }'`
limit=50
if (( ${res%\%} > limit )); then
echo "Your disk >= ${limit}% full"
fi
${res%\%}
마지막 % 항목을 제거합니다 res
. (첫 번째 %는 마지막 항목 제거를 의미하며, 제거할 패턴임을 나타내려면 \%를 이스케이프 처리해야 합니다.)
답변3
그냥 해보자:
df -P | awk 'NR == 2 { print $5+0; exit }'