2017-04-01 5 views
0

프로그램의 출력이 다른 것으로 바뀔 때까지 계속해서 처음 네 자리를 하나씩 계속 반복적으로 실행하는 bash 스크립트를 작성하고 싶습니다.명령 줄 인수를 반복하는 Bash 스크립트

:

./exampleProgram userName에 0000-4567-4561-4564

출력 : 잘못된

./exampleProgram userName에 0001-4567-4561-4564

출력 : 틀린

./example 프로그램 userName 0002-4567-4561-4564

출력 : 올바른

-Loop은 단지 최악의 시나리오는 약 10,000 루프 그래서 변경 처음 네의 네 자리 숫자의

마지막 세 세트를 일정하게 유지됩니다 종료됩니다.

답변

1

정확하게 정수를 반복하고 printf과 같은 것을 사용하여 올바른 형식의 인수를 생성하십시오. 예를 들어

예를 들어
for ((i=0; i < 10000; i++)); do 
    printf -v sn '%04d-4567-4561-4564' "$i" 
    ./exampleProgram userName "$sn" 
done 
+0

어떤 이유로 나는 이것을 사용할 때 명령 줄에 입력을 요청받습니다. 이것이 프로그램이 설치된 방식 일 수 있습니까? 결과를 무차별 채우기에서 이렇게 루프를 억제하는 것처럼? 나는 그것을 반복해서 실행할 필요가 없기 때문에 여전히 스크립트의 루프에 있지만 매번 물건을 입력하라는 메시지가 표시됩니다. – frillybob

+0

'exampleProgram'이 무엇인지 모른 채 말하기 란 불가능합니다. – chepner

0

:

exampleProgram() {  #demo 
     echo "Debug: $1 $2" >&2 
     (($RANDOM % 10)) && { echo "Wrong"; return 1; } || { echo "Correct for $1 $2" ; return 0; } 
} 

for i in {0000..9999} 
do 
     res=$(exampleProgram JohnDoe "$i-4567-4561-4564") 
     [[ "$res" =~ Correct ]] && break; 
done 
echo "Loop terminated at ($i) - result $res" 

인쇄

Debug: JohnDoe 0000-4567-4561-4564 
Debug: JohnDoe 0001-4567-4561-4564 
Debug: JohnDoe 0002-4567-4561-4564 
Debug: JohnDoe 0003-4567-4561-4564 
Loop terminated at (0003) - result Correct for JohnDoe 0003-4567-4561-4564 

exampleProgram는 같은 반환 된 문자열 대신 그것을 확인하는 것이 좋습니다 exit status 다른 경우 :

res=$(exampleProgram JohnDoe "$i-4567-4561-4564") 
    (($?)) || break; 
관련 문제