2014-01-25 4 views
0

은 가능한이 작업을 수행하는 것입니다 : fedoraDepsyum 명령 기능이사례에 여러 명령이 있습니까?

case $ans1_1 in 
    y)fedoraDeps;; 
     echo "something here";; 
     make -j 32;; 
    n)echo "Continuing"...;; 
     ;; 
    *) echo "Answer 'y' or 'n'";; 
    esac 

.

나는 경우에이를 복제하기 위해 노력하고있어 :

if [[ $ans1_1 = y ]]; then 
    fedoraDeps 
    echo "something here" 
    make -j 32 
elif [[ $ans1_1 = n ]]; then 
     echo "Continuing..." 
     : 
else 
    echo "Answer 'y' or 'n'" 
fi 
+3

는';'사건을 종료합니다. 모든 줄의 끝 부분에 두지 마십시오. 각 줄마다 마지막 줄에 넣으십시오. 자세한 내용은 Google "bash case statement"를 참조하십시오. – lurker

+0

완전한 추측이지만 두 개의';; '와는 반대로 명령을 구분하기 위해 하나의';'를 사용하여 시도해 보았습니까? 또는, 그 문제에 관해서는, 스크립트 파일에서 생각할';'구분 기호가없는 줄 바꿈을 허용하십시오. – IMSoP

+1

나는 일반적으로 닫는';;'을 한 줄에 붙이면 더 두드러지게 만듭니다. –

답변

6

; 또는 라인 피드는 명령을 종료하는 데 사용됩니다. ;;은 case 문을 끝내는 데 사용됩니다. 그냥 모든 명령 후 case 문을 종료하려고하고, 괜찮아하지 않습니다

case $ans1_1 in 
    y) 
     fedoraDeps 
     echo "something here" 
     make -j 32 ;; 
    n) 
     echo "Continuing"... ;; 
    *) 
     echo "Answer 'y' or 'n'" ;; 
esac 
+0

'''LF'''를 사용하면 이식성에 문제가 발생합니까? 스크립트가 FreeBSD, Debian, Fedora, RHEL에서 정확히 같은 방식으로 작동합니까? – user3084450

+0

이 구문은 모든 POSIX 호환 쉘에서 잘 작동합니다. FreeBSD에'fedoraDeps'라는 명령이 있는지 여부는 또 다른 문제입니다. –

+0

'''fedoraDeps'''는 파일 상단에 정의 된 함수이므로 아무런 문제가 발생하지 않습니다. 감사합니다! – user3084450

1

을 인해 쉘 행동의 변화에 ​​내가 세미콜론 ... 단일 전에 공간을 사용하는 것이 좋습니다 ';' 당신이 원하는 것을 허용하십시오. 더블 ';' '말'의 경우 '일치', 즉

이 작동합니다 :

case $ans1_1 
in 
    y) fedoraDeps ; 
     echo "something here" ; 
     make -j 32 ;; ## last command for case 'match' 
    n) echo "Continuing"... ;; 
     ## if you want a blank line then just use one 
    *) echo "Answer 'y' or 'n'" ;; 
esac 
+3

';'앞에 공백을 삽입해도 아무런 차이가 없어야합니다. –

+0

어떤 쉘이'; '를 제어 문자로 취급하지 못하고 앞의 단어의 일부가 될 수 있습니까? – chepner

+0

흠 알맞은 코멘트; * Nix (또는 * Nix-like OSs & shells)의 많은 맛을 가지고 작업 한 지 약 30 년이 지난 후에 나의 경험은 내가 만난 것들을 반영한다. 예를 들어 Bash의 현재 버전으로 우리의 토론을 제한한다면 논평은 유효하다. 그리고 광산은 단순히 무시 될 수 있습니다. :) –

관련 문제