.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 제거와 같은 방법을 사용하십시오.