문제

아래의 쉘 스크립트로 테스트하고 있습니다.

#!/bin/ksh -x


instance=`echo $1 | cut -d= -f2`
if [ $instance == "ALL" ]
then
echo "strings matched \n"
fi

IF 조건 에서이 오류가 발생합니다.

: ==: unknown test operator

~이다 == 사용하기에 적합한 구문이 아니십니까? 아래와 같이 명령 줄에서 실행 중입니다

test_lsn_2 INSTANCE=ALL

누구든지 해결책을 제안 할 수 있습니까? 감사.

도움이 되었습니까?

해결책

나는 당신이 KSH를 사용하고 있다는 것을 알지만 Bash를 태그로 추가했습니다. Bash 관련 답변을 수락합니까? Bash를 사용하면 다음과 같은 방법으로 수행 할 수 있습니다.

if [[ "$instance" == "ALL" ]]
if [ "$instance" = "ALL" ]
if [[ "$instance" -eq "ALL" ]]

보다 여기 그것에 대한 자세한 내용.

다른 팁

문자열을 비교하려면 이중이 아닌 단일 =가 필요합니다. 문자열이 비어있는 경우 이중 인용구로 넣어야합니다.

if [ "$instance" = "ALL" ]
then
    echo "strings matched \n"
fi

노력하다

if [ "$instance" = "ALL" ]; then

몇 가지 실수가있었습니다.

  1. 비어있는 (가능성이없는) 케이스를 보호하려면 변수 주변의 이중 인용문이 필요합니다. 이 경우 껍질이 보입니다 if [ = "ALL" ]; then 유효하지 않습니다.

  2. 쉘의 동등한 사람은 단일을 사용합니다 = (값을 할당하는 방법이 없습니다. if 쉘에서).

totest=$1
case "$totest" in
  "ALL" ) echo "ok" ;;
  * ) echo "not ok" ;;
esac

나는 이미 비슷한 질문에 대답했다. 기본적으로 필요한 운영자는입니다 = (아니다 ==) 그리고 변수가 비어 있으면 구문이 끊어집니다 (예 : if [ = ALL]). 살펴보십시오 다른 대답 자세한 내용은.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top