![잘못된 산술 연산자(읽기 명령에서 부동 소수점 숫자를 전달할 때 '7.16.3' 태그가 붙은 오류)](https://linux55.com/image/201510/%EC%9E%98%EB%AA%BB%EB%90%9C%20%EC%82%B0%EC%88%A0%20%EC%97%B0%EC%82%B0%EC%9E%90(%EC%9D%BD%EA%B8%B0%20%EB%AA%85%EB%A0%B9%EC%97%90%EC%84%9C%20%EB%B6%80%EB%8F%99%20%EC%86%8C%EC%88%98%EC%A0%90%20%EC%88%AB%EC%9E%90%EB%A5%BC%20%EC%A0%84%EB%8B%AC%ED%95%A0%20%EB%95%8C%20'7.16.3'%20%ED%83%9C%EA%B7%B8%EA%B0%80%20%EB%B6%99%EC%9D%80%20%EC%98%A4%EB%A5%98).png)
bash 스크립트를 사용하여 소프트웨어를 자동으로 업데이트하려고 합니다. 버전 번호(예: 7.16.3)를 전달하면 다음 오류가 발생합니다: ") 구문 오류 잘못된 산술 연산자(" 태그가 붙은 오류)
명령어에서 값을 전달할 때 관련 답변을 찾을 수 없습니다 read
. 내 코드는 다음과 같습니다
DATE=`date +'%Y%m%d'`
BSI_SETUP=/opt/bsi/source/setup/elk_${DATE}
OLD_VERSION_FILEBEAT=`/usr/share/filebeat/bin/filebeat version| awk '{print $3 }' 2>/dev/null`
OLD_VERSION_METRICBEAT=`/usr/share/metricbeat/bin/metricbeat version| awk '{print $3 }' 2>/dev/null`
MY_HOME=~
read -p 'Enter filebeat & metricbeat version: ' NEW_VERSION_BEATS
read -p 'Enter CSC environmet: ' CSC_ENV
if [[ ${NEW_VERSION_BEATS} -ne ${OLD_VERSION_FILEBEAT} ]]; then # I get error here
sudo yum install -y $BSI_SETUP/filebeat-*.rpm 2>/dev/null
else
echo "Filebeat is up-to-date"
fi
if [[ ${NEW_VERSION_BEATS} -ne ${OLD_VERSION_METRICBEAT} ]]; then # and here
sudo yum install -y $BSI_SETUP/metricbeat-*.rpm 2>/dev/null
else
echo "Metricbeat is up-to-date"
fi
답변1
-ne
숫자가 아닌 수치 비교를 하세요 7.16.3
. (비록 "버전 번호"라고도 합니다.) 사실 Bash에 관한 한 7.16
Bash는 정수만 처리하기 때문에 둘 다 아닙니다. 오류는 실제로 Bash에서 더 명확합니다 [ .. ]
.
$ [ 7.16.3 -ne 7.16.3 ]
bash: [: 7.16.3: integer expression expected
[ "$a" = "$b" ]
[[ $a == "$b" ]]
문자열 동등 비교에는 또는 를 사용 하고, !=
불일치 비교에는 또는 를 사용하세요. ( [ "$a" == "$b" ]
Bash에서는 유효하지만 표준은 아닙니다.)
OTOH, 오류가 다음과 같다면 이전 오류는 ")
값의 캐리지 리턴 문자로 인한 것입니다.
$ var=$'7.16\r'
$ [[ $var -ne 7.16 ]]
")syntax error: invalid arithmetic operator (error token is ".16
이 경우 입력이 Windows 텍스트 파일에서 나오는지 확인하거나 var=${var%$'\r'}
CR 제거와 같은 방법을 사용하십시오.