2010-03-01 11 views
33

쉘에서 복수 테스트를 사용하여 if하는 방법을 모르겠습니다. 나는 문제가이 스크립트를 작성하는 데 문제가 있습니다 :쉘 스크립트에서 elif를 사용하는 경우

./compare.sh : : : 실종`]

echo "You have provided the following arguments $arg1 $arg2 $arg3" 
if [ "$arg1" = "$arg2" && "$arg1" != "$arg3" ] 
then 
    echo "Two of the provided args are equal." 
    exit 3 
elif [ $arg1 = $arg2 && $arg1 = $arg3 ] 
then 
    echo "All of the specified args are equal" 
    exit 0 
else 
    echo "All of the specified args are different" 
    exit 4 
fi 

문제는이 오류마다 얻을 수있다 '명령을 찾을 수 없습니다

+5

상당수의 논평가가 [[대신 스크립트를 bash에 맞게 작성하는 것이 좋습니다. 일반 Bourne 쉘 (sh) 구문을 고수 할 수 있으면 유지 보수 및 이식성 문제가 줄어 듭니다. –

답변

25

sh

if [[ expression ]]

쉘 연산자로 && 해석된다. 당신이 인수를 생략 할 때 [ 혼란 얻을 수 있기 때문에, 또한

[ "$arg1" = "$arg2" -a "$arg1" != "$arg3" ] 

, 당신은 항상 변수를 인용한다 : -a로 변경, 그 [의 결합 연산자입니다.

5

"["을 "[["및 "]"를 "]]"로 변경하십시오.

+1

'['에서 'test'로 변경하십시오. –

7

사용 대괄호 ...

+1

이것은 [[['구조가 쉘에 내장되어 있고'['는'test' 명령의 또 다른 이름이기 때문에 이것은 해결책입니다. 그 문법은 - man test를 보라. –

+4

기술적으로'['는 쉘 내장이지만'[['는 쉘 키워드이다. 그것이 차이점입니다. –

+1

그래서 bash 명령어'type [','type [[','help [''help [''. – Apostle

2

코드 샘플을 가지고 있습니다. 시도해보십시오.

echo "*Select Option:*" 
echo "1 - script1" 
echo "2 - script2" 
echo "3 - script3 " 
read option 
echo "You have selected" $option"." 
if [ $option="1" ] 
then 
    echo "1" 
elif [ $option="2" ] 
then 
    echo "2" 
    exit 0 
elif [ $option="3" ] 
then 
    echo "3" 
    exit 0 
else 
    echo "Please try again from given options only." 
fi 

이렇게하면됩니다. :)

+0

Gawd라는 파일이 있습니다.이 파일은 저에게 이상하게 보입니다. 왜 'else'뒤에 'then'이 없습니까? 실제로는 기발하지 않을 수도 있지만 C와 비교해 보입니다. – Rolf

+0

$ option 다음에 공백이 필요하고 before = 매회 잘 실행해야합니다. 그렇지 않으면 매번 1 – PiyusG

23

조쉬 리의 대답은 작동하지만이 같은 가독성은 "& &"연산자를 사용할 수 있습니다

echo "You have provided the following arguments $arg1 $arg2 $arg3" 
if [ "$arg1" = "$arg2" ] && [ "$arg1" != "$arg3" ] 
then 
    echo "Two of the provided args are equal." 
    exit 3 
elif [ $arg1 = $arg2 ] && [ $arg1 = $arg3 ] 
then 
    echo "All of the specified args are equal" 
    exit 0 
else 
    echo "All of the specified args are different" 
    exit 4 
fi 
1

이 나를 위해 노력하고,

# cat checking.sh 
#!/bin/bash 
echo "You have provided the following arguments $arg1 $arg2 $arg3" 
if [ "$arg1" = "$arg2" ] && [ "$arg1" != "$arg3" ] 
then 
    echo "Two of the provided args are equal." 
    exit 3 
elif [ $arg1 == $arg2 ] && [ $arg1 = $arg3 ] 
then 
    echo "All of the specified args are equal" 
    exit 0 
else 
    echo "All of the specified args are different" 
    exit 4 
fi 

# ./checking.sh 
You have provided the following arguments 
All of the specified args are equal 

당신은 추가 할 수 있습니다 스크립트에서 "set -x"를 사용하여 오류를 해결하십시오.

감사합니다.

관련 문제