Yanıtlar:
some_commandTest koşulunuz olarak kullanabilirsiniz .
while ! some_command; do sleep 1; done
some_commandBir hata ile çıktığı sürece koşul doğru kalacaktır .
Veya ek kontroller yapmak istiyorsanız daha ayrıntılı bir yol:
while ! some_command
do
# add more if desired
sleep 1
done
while ! some_command; do several; commands; sleep 1; done
Bu nedir untildöngü içindir:
until some_command
do sleep 1
done
Bir whiledöngünün mantıksal olumsuzlamasıdır .
untilDöngüuntilDöngü sürekli bir yürütür bileşiği ile liste uzun bir yanı bileşik listesi sıfır olmayan bir çıkış durumu vardır.
Until döngüsünün biçimi aşağıdaki gibidir:
bileşik listesi-1'e kadar
bileşik-liste-2 yap
tamam
untilkadar komut. Aksi takdirde, bileşik listesi-2 yürütülür ve işlem tekrarlanır.Sadece şunları yapabilirsiniz:
false
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
bunun dezavantajı vardır ama her zaman önce bir saniye
0 ile çıkmak için birkaç komuttan herhangi birinden çıkmak istiyorsanız şunları yapabilirsiniz:
while true; do
if [ some_command ] ; then break ; fi
if [ some_other_command ] ; then break ; fi
sleep 1
done
tabii ki sadece some_command
[ve ]komutlarının.
Ne while ! ...de until ...öncesinde POSIX.1-2001 onların kabuk ortamı dondu sistemlerde çalışır. Ancak, bunu yapar.
while :; do
if some command; then
break
fi
sleep 1
done
Toplam taşınabilirliğe ihtiyacınız yoksa, neden bir kabuk komut dosyası yazıyorsunuz? Perl'in Bash'ten daha müsait olması muhtemeldir.
sleep 1 while 0 != system qw(some command);
(Yukarıdaki gibi, sleepyalnızca komut başarısız olursa yürütülür.)