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