Linux bash의 if 문

Linux bash의 if 문

if 문에서 두 문자열을 비교하려고 합니다. 하지만 프로그램이 매번 첫 번째 조건을 통과하기 때문에 비교가 제대로 실행되지 않는 것 같습니다.

#!/bin/bash
switch=$(ssh 192.168.14.10 egrep somefile /tmp/tmpfile.txt)
if [ "$switch" == "tmp" ]; then
     echo "expected output"
else
     echo "unexpected output"
fi

매번 "기대되는 출력"이 달성됩니다. 첫 번째 조건을 "!="로 변경하려고 시도했지만 여전히 첫 번째 문에 도달합니다.

답변1

귀하의 비교는 정확하고 관용적 인 Bash 코드입니다.

echo "switch='$switch'"이전에 삽입을 시도 if하고 매번 변수 내용이 무엇인지 확인하십시오.

답변2

먼저 가짜 공백을 제외합니다.

if [ "$(printf "%s" "$switch"| tr -d " ")" = tmp ]; then

그래도 실패하면 테스트하기 전에 다음 두 줄을 추가하세요. 출력이 다른 경우 테스트를 수정하세요.

echo tmp | od -c
echo "$switch" | od -c

답변3

첫 번째 줄을 다음으로 변경합니다.

switch=$(ssh 192.16810.10.10 egrep somefile /tmp/tmpfile.txt)

다음에:

export switch=$(ssh 192.16810.10.10 egrep somefile /tmp/tmpfile.txt)

이전에 또는 변수를 증가시키는 동안 거의 동일한 문제가 여러 번 발생했습니다. where variable=$variable++또는 추가하는 대신 루프를 통해 매번 variable=$variable+1텍스트 문자열 "+1""++"끝에 추가합니다.

문제를 즉시 사용 let variable=$variable++하거나 해결하십시오. 루프가 시작되기 전에 모든 것이 설정된 경우에도 를 사용할 수 있습니다.let variable=$variable+1export

나는 그 변수를 저장할 때 bash가 뭔가 잘못하고 있다고 생각합니다. 따라서 비교 작업을 수행하고 이를 저장하기 위해 let/export를 사용하여 다른 작업을 수행합니다. 같은 질문에 대한 답변을 찾고 있는데 문자열 대신 숫자를 비교할 때 일관성 없는 결과가 나타납니다. 어쨌든 첫 번째 문 이전에 내보내기를 사용해 보는 것은 나쁠 것이 없습니다.

관련 정보