2010-01-17 3 views
0

if 문을 수행하는 방법을 파악하는 데 어려움을 겪고 있습니다. 나는이하고 싶은 : (함수가 단 1 인자 을 가지고 있으며, $ 1 현재 폴더 (디렉토리입니다)) 또는 경우쉘에서이 if 문을 만드는 방법

를 (함수가 2 개 인수가 및 $ 1 디렉토리가 아니다) 경우 THEN

.... 

END 그렇지 않은 매우 분명 경우,

죄송합니다

감사 즉 콘 또는 다른 POSIX 쉘을 Bourne 쉘에서 작동 혼자하게됩니다 (즉, $ 가정 -

if [ $# = 1 -a -d "$1" ] || [ $# = 2 -a ! -d "$1" ] 
then 
    ... 
fi 

당신은 너무 다른 연산자를 사용할 수 있습니다 :

답변

0

당신 거의 미리의 질문에 필요한 것을 말했다 #는 Bash에서하는 함수에서 올바르게 작동합니다. 당신이 시험에서 '-o'연산자를 사용할 수 있습니다

fun() 
{ 
    if [ $# = 1 -a -d "$1" ] || [ $# = 2 -a ! -d "$1" ] 
    then echo "Pass ($1, $#)" 
    else echo "Fail ($1, $#)" 
    fi 
} 

fun $HOME 
fun $HOME abc 
fun $HOME/xyz abc 
fun /dev/null 
+0

주 ('[') 내장; 오랫동안 서술 된 (그러나 반드시 필요한 것은 아님) 조언은 '-a'와 '-o'(또는 심지어 '-a'또는 '-o') 모두를 망치 려하지 않는 것입니다. 그림과 같이 작업하는 것은 신뢰할 수 있으며 대괄호 (대괄호)를 벗어날 필요가 없습니다. –

+0

감사합니다. – Selmak

0
if [[ $# == 1 && -d "$1" ]]; then 
    echo "one param, first is a dir" 
elif [[ $# == 2 && ! -d "$1" ]]; then 
    echo "two params, first is not a dir" 
else 
    echo "unexpected" 
fi 
+0

나는 OP가 "elif"보다는 "or"를 원한다고 생각한다. –

+0

각각의 경우마다 다른 것을 (slighly)하고 싶을 것 같습니다. –

관련 문제