나는 다음과 같은 스크립트를 작성하곤 했습니다.
some_command
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
some_command
두번 쓰다보니 늘 짜증이 나네요. 어떻게든 이것을 루프 테스트 섹션에 넣을 수 있나요?
답변1
some_command
이를 테스트 조건 으로 사용할 수 있습니다 .
while ! some_command; do sleep 1; done
종료 시 오류가 발생하는 한 some_command
이 조건은 true로 유지됩니다 .
또는 추가 검사를 수행하려면 보다 자세한 접근 방식을 사용할 수 있습니다.
while ! some_command
do
# add more if desired
sleep 1
done
답변2
루프의 용도는 다음과 같습니다 until
.
until some_command
do sleep 1
done
그것은 순환성의 논리적 부정이다 while
.
until
고리
이 작업은
until
연속적으로 실행되어야 합니다.화합물 목록또 다른화합물 목록0이 아닌 종료 상태가 있습니다.Until 루프의 형식은 다음과 같습니다.
화합물 목록-1까지 화합물 목록 2 실행 완벽한
- 이것화합물 목록-1실행되어야 하며, 종료 상태가 0이면
until
명령이 완료됩니다. 그렇지 않으면,화합물 목록-2실행되고 프로세스가 반복됩니다.
답변3
다음을 수행할 수 있습니다.
false
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
여기에는 단점이 있지만 항상 먼저 1초 동안 잠을 자게 됩니다.
여러 명령 중 하나를 사용하여 0으로 종료하려면 다음을 수행할 수 있습니다.
while true; do
if [ some_command ] ; then break ; fi
if [ some_other_command ] ; then break ; fi
sleep 1
done
이는 물론 다음에도 적용됩니다.some_command
답변4
또한 POSIX.1-2001 이전에 쉘 환경을 고정한 시스템에는 while ! ...
적용 되지 않습니다 . until ...
그러나 그렇습니다.
while :; do
if some command; then
break
fi
sleep 1
done
완전한 이식성이 필요하지 않은 경우 쉘 스크립트를 작성하는 이유는 무엇입니까? 펄은더아마도 Bash보다 더 유용할 것입니다.
sleep 1 while 0 != system qw(some command);
(위에서 언급했듯이 sleep
명령이 실패한 경우에만 실행됩니다.)