2014-10-17 4 views
0

예를 들어이 데몬이 있습니다. 하나의 스크립트에서 5 가지 유형. 이제는 데몬 번호를 지정하여 (하나씩 시작) 을 시작하거나 중지 할 수 있기를 원하거나 "모두"(대량으로 시작)를 지정하려고합니다.

형식 :
(1) 정확하게 (어느 번호하거나 :
(RUNSCRIPT) (커맨드 이름) (데몬 # 또는 "전부")

때 사용자 입력, 두 조건 만족 필요 "모든)
또는
(2) 잘못 (중 하나를 입력 NUM보다 계산 $보다 크거나 다른 모든 문자열 "모든 ").
을 모든 조건은 이미 하나를 제외하고 달성하는 경우, 사용자 입력 다른 "all"보다 문자열

샘플 코드 : I는 입력 할 때마다if : Expression syntax csh의 오류 - 받아 들여야 만하는 유일한 문자열 이외의 다른 문자열을 허용하지 않습니다.

case 'startDaemon': #commandName 
set count = 5 

if ($#argv == 2 && $2 == all) then 
    echo "correct, do this" 
else if ($#argv == 2 && $2 < $count) then 
    echo "correct too, do this" 
else if ($#argv == 2 && ($2 != all || $2 >= $count)) then 
    echo "Incorrect parameter: specify daemon # less than $count or 'all' to start all." 
else 
    echo "Please use: $0(runscript) $1(commandname) (daemon # or all)" 

: (실행 스크립트) startDaemon 안녕하세요는, 예를 들어, 오류가 보여줍니다이 3 상태로 갔었어야

if: Expression syntax 

. 문제가 논리적 인 운영자 또는 기타 조건에있는 경우 도움이되고 친절하게 지적하십시오. 미리 감사드립니다

추신. 임 csh을 사용 중입니다. 나에게 주어진 스크립트는 csh에있다.

답변

0

$count에 문자열이 포함되어 있으면 즉각적인 문제는 비교 $2 < $count입니다.

#!/bin/csh 

set count = 5 

if ($#argv == 2) then 
    if ($2 == all) then 
     echo "correct, do this" 
    else if (`echo $2 | grep '^[0-9]*$'`) then 
     if ($2 < $count) then 
       echo "correct too, do this" 
     else 
      echo "Number must be less than 5" 
     endif 
    else 
     echo "Incorrect parameter: specify daemon # less than $count or 'all' to start all." 
    endif 
else 
    echo "Please use: $0(runscript) $1(commandname) (daemon # or all)" 
endif 
: 여기

는 작업 솔루션입니다