잘못된 산술 연산자(읽기 명령에서 부동 소수점 숫자를 전달할 때 '7.16.3' 태그가 붙은 오류)

잘못된 산술 연산자(읽기 명령에서 부동 소수점 숫자를 전달할 때 '7.16.3' 태그가 붙은 오류)

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.16Bash는 정수만 처리하기 때문에 둘 다 아닙니다. 오류는 실제로 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 제거와 같은 방법을 사용하십시오.

관련 정보