if / else 문에서 변수를 정수가 아닌 텍스트 문자열과 비교하는 방법은 무엇입니까?


24

쉘 스크립트를 작성하는 과정에서 스크립트 중간에있는 다음 if / else 문에 문제가 발생했습니다.

if [ $act -eq "add" ]
then
    read - "add or update: " $comm
    git commit -m "$comm $file"
else
    git commit -m "$act $file"
fi

반환 오류는 다음과 같습니다.

./gitup: line 13: [: add: integer expression expected

그런 다음 나머지 스크립트를 진행합니다. if 세그먼트로 변수를 정수가 아닌 문자열 입력으로 평가 / 비교하는 방법은 무엇입니까? 내가 시도한 다른 몇 가지 중에서 "! ="를 사용할 때 다른 오류가 필요했습니다.

답변:


38

이 같은:

act="add"
if [[ $act = "add" ]]
then
    echo good
else
    echo not good
fi

-eq숫자 비교, =문자열 비교에 사용


감사. 나는 그것을 시도했고, 키 입력이 필요한 스크립트가 비어 있었지만, 관련없는 구문 오류로 인해 더 이상 다운 된 것을 발견 했으므로 완벽하게 작동했습니다. 도와 주셔서 감사합니다.
tony_perkis666

3
@ josephmarhee : [[]]테스트는 Bash 특정 구문 이며이 예제 []는 질문에 사용 된 POSIX와 마찬가지로 잘 작동합니다 . 인터프리터가 명시 적으로 #!/bin/bash또는 유사 하게 제공 [[]]되는 경우 문제없이 사용할 수 있습니다 (그리고 Bash 의 대안보다 약간 빠릅니다. 어쨌든 병목이 아니라고 생각합니다) []. Bash 사양이 전혀 필요하지 않은 경우 스크립트는 Dash와 같이 조금 더 빠르게 실행됩니다. POSIX는 고유 한 이식성을 보장합니다.
Daniel Andersson

4

이 방법도 효과가 있습니다. @Guru의 답변과 매우 유사하지만 이중 대괄호가 필요하지 않습니다.

if [ "$act" == "add" ]
then
echo "Good!"
      else
      echo "Not good!"
fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.