bash 문자열을 int로

bash 문자열을 int로

내가 시도한 것은 다음과 같습니다.

#!/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 res2bash는 여전히 이를 문자열로 처리합니다. 다음을 수행할 수 있습니다.

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 }'

관련 정보