![문자열을 부동 소수점으로 변환한 다음 조건부 연산에 사용하는 방법은 무엇입니까? [복사]](https://linux55.com/image/145083/%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EB%B6%80%EB%8F%99%20%EC%86%8C%EC%88%98%EC%A0%90%EC%9C%BC%EB%A1%9C%20%EB%B3%80%ED%99%98%ED%95%9C%20%EB%8B%A4%EC%9D%8C%20%EC%A1%B0%EA%B1%B4%EB%B6%80%20%EC%97%B0%EC%82%B0%EC%97%90%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
데비안 배포판이 9.0보다 오래된지 확인하기 위해 나만의 bash 스크립트를 작성하려고 합니다.
암호:
VERSION=$(cat /etc/debian_version)
echo $VERSION
if [ "$VERSION" -lt "9.0" ]; then
echo "Debian version is less than 9"
else
echo "Debian version is greater than 9"
fi
하지만 내가 받는 오류는 다음과 같습니다.
./test.sh: 4행: [: 8.2: 정수 표현식 필요
기본적으로 $VERSION
는 문자열 유형이지만 으로 8.2
만들려고 하는데 8.2
float입니다. 그래서 나는 <=
그것을 사용할 수 있습니다.
답변1
이것을 사용해 보세요. 저는 그것을 floats 비교에 사용합니다 bc
.
VERSION=$(cat /etc/debian_version)
echo $VERSION
if [ "`echo "${VERSION} < 9.0" | bc`" -eq 1 ]; then
echo "Debian version is less than 9"
else
echo "Debian version is greater than 9"
fi
한 줄로 사용awk
awk '{if ($1 < 9.0) {print "Debian version is less than 9";} else if ($1 > 9.0){ print "Debian version is greater than 9";}}' /etc/debian_version
답변2
버전에는 간단한 부동 소수점 숫자가 없으며 버전 1.10은 1.9보다 큽니다. sort
유틸리티를 사용하는 솔루션은 버전 번호를 처리하는 방법을 알고 있다고 생각합니다 .
check_versions(){
# check_version <reference> <version to check>
if [[ $1 == $2 ]]; then
echo 'same'
else
low=$(echo -e "$1\n$2" | sort --version-sort | head --lines=1)
if [[ $low == $1 ]]; then
echo 'greater'
else
echo 'lower'
fi
fi
}
ref='8.5' # reference version for check
check_versions $ref '8.2' # current version is lower!
check_versions $ref '8.5' # current version is equal!
check_versions $ref '8.12' # current version is greater!
나는 이것이 더 나은 해결책이 되어야 한다고 생각한다.