Bash에서 루프 n을 반복하는 방법 exit elif

다음과 같은 시나리오가 있습니다.

if [file exists]; then
   exit
elif
   recheck if file exist (max 10 times)
   if found exit else recheck again as per counter
fi 



답변

이 루프를 수행하는 방법에는 여러 가지가 있습니다.

ksh93구문을 사용 하여 ( zsh및에서 지원 bash) :

for (( i=0; i<10; ++i)); do
    [ -e filename ] && break
    sleep 10
done

POSIX와 유사한 쉘의 경우 :

n=0
while [ "$n" -lt 10 ] && [ ! -e filename ]; do
    n=$(( n + 1 ))
    sleep 10
done

두 루프는 파일의 존재 여부를 다시 테스트하기 전에 각 반복에서 10 초 동안 대기합니다.

루프가 완료된 후 마지막으로 파일이 존재하는지 테스트하여 루프가 10 회 실행으로 인해 종료되었는지 또는 파일이 표시되어 종료되었는지 확인해야합니다.

원하는 경우, inotify-tools에 액세스 할 수있는 경우 sleep 10통화를

inotifywait -q -t 10 -e create ./ >/dev/null

현재 디렉토리에서 파일 작성 이벤트가 발생할 때까지 기다리지 만 10 초 후에 시간 종료됩니다. 이렇게하면 주어진 파일 이름이 나타나면 즉시 루프가 종료됩니다.

와 전체 코드는 inotifywait(로 대체 sleep 10당신이 원하지 않는 경우)처럼 보일 수 있습니다

for (( i=0; i<10; ++i)); do
    [ -e filename ] && break
    inotifywait -q -t 10 -e create ./ >/dev/null
done

if [ -e filename ]; then
    echo 'file appeared!'
else
    echo 'file did not turn up in time'
fi


답변

개수가 변수가 아닌 경우 중괄호 확장을 사용할 수 있습니다.

for i in {1..10}   # you can also use {0..9}
do
  whatever
done

개수가 변수이면 다음 seq명령을 사용할 수 있습니다 .

count=10
for i in $(seq $count)
do
  whatever
done


답변

n=0
until [ "$((n+=1))" -gt 10 ]
do    <exists? command exit
done
echo oh noes!

test -e file && exit더 유연 하지만


답변