Я писал свои сценарии так:
some_command
while [ $? -ne 0 ] ; do
sleep 1
some_command
done
Меня всегда раздражало, что я должен писать some_command
дважды. Могу ли я как-то поместить его в секцию проверки петли?
shell-script
Михай
источник
источник
while ! some_command; do several; commands; sleep 1; done
Вот для чего предназначен
until
цикл:Это логическое отрицание
while
цикла.В спецификации сказано:
until
Loopuntil
Цикл должен непрерывно выполнить одно соединение-список тех пор , пока другое соединение-лист имеет статус выхода ненулевой.Формат цикла до следующего:
until
команда выполнится. В противном случае составной список-2 должен быть выполнен, и процесс повторяется.источник
Вы можете просто сделать:
у этого есть недостаток, хотя это то, что это всегда спит одну секунду сначала
Если вы хотите иметь возможность выйти по любой из нескольких команд, чтобы выйти с 0, вы можете сделать:
что, конечно, также работает только для
some_command
источник
[
и]
вокруг команд.Ни работает,
while ! ...
ниuntil ...
работает в системах, которые заморозили среду оболочки до POSIX.1-2001. Это, однако, делает.Если вам не нужна полная переносимость, зачем вы пишете сценарий оболочки? Perl более доступен, чем Bash.
(Как и выше, команда
sleep
выполняется только в случае сбоя команды.)источник