2016-07-06 2 views
2

나는 내가 ./jmeter_script.sh: 19: shift: can't shift that many 다음 종료를 말하는 오류가 ./jmeter_script.sh start abc.jmx log.jtl을 사용하여 스크립트를 실행하려고하면 다른 methods.The 스크립트와 쉘 스크립트가쉘 스크립트를 실행하는 동안 "shift : 많은 부분을 이동할 수 없습니다"라는 오류를 해결하는 방법은 무엇입니까?

status(){ 
    PID=$(ps -ef | grep jmeter_script.sh|grep -v grep|awk '{print $2}') 
    } 

    start(){ 
    shift 
    if [ "$#" -ne 2 ]; then 
      exit 1; 
    fi 
    jmeter.sh -n -t "$1" -l "$2" 
    } 

    stop(){ 
     while true; do 
      read -p "Do you really want to stop?" yn 
      case $yn in 
       [Yy]*) ps -ef | grep jmeter | grep -v grep | awk '{print $2}'|xargs kill; break;; 
       [Nn]*) exit;; 
       *) echo "Please answer yes or no.";; 
      esac 
view(){ 
#some code 
} 

    ####Main 
    while [ "$1" != "" ]; do 
    case "$1" in 
      start) 
       start 
       ;; 

      stop) 
       stop 
       ;; 

      status) 
       status 
       ;; 
      view) 
       view 
       ;; 
      *) 
       echo $"Usage: $0 {start|stop|status|view}" 
       exit 1 
      esac 
     shift 
    done 

입니다 있습니다. 내 스크립트를 ubuntu 서버에서 실행 중입니다. 이 문제를 해결하기 위해 노력했지만이 오류에 대한 적절한 링크를 찾을 수 없습니다. 누군가 제발 도와주세요.

+0

'$ #'이상으로 이동할 수 없습니다. '$ # '가 0 일 때 ('start'의 호출과 같이),'shift'를 전혀 사용할 수 없습니다. 함수 내에서''$ @ ''등은 함수 호출에 대한 인수이며, 스크립트 전체에 대한 인수는 아닙니다. –

+0

@JonathanLeffler 어떻게 해결할 수 있습니까? 'start()'메서드에서'if 조건 '을 어떻게 바꿀 수 있습니까? 또는'start()'메소드를 어떻게'command line arguments'를 취할 수 있도록 변경할 수 있습니까? – user6348718

+0

@Cyrus 당신이 한 말을 듣지 못했습니다. 내가 잘못 된 곳을 설명해 주시겠습니까? – user6348718

답변

1

이들은 함수가 아니라 메소드입니다. 적용을 시작하지 않는 곳에서 OOD 용어를 적용하여 선상에 서지 마십시오.

오류가 발생하지 않도록하는 가장 좋은 방법은 인수가 부족할 때 이동하지 않는 것입니다. $ # BEFORE 값을 확인하십시오.

많은 플래그를 지정하지 않으면 ps -ef 출력을 구문 분석하기가 더 쉽습니다. PID와 PNAME 만 있으면됩니다.