Существует хорошо известный while condition; do ...; done
цикл, но есть ли do... while
цикл стиля, который гарантирует хотя бы одно выполнение блока?
shell
control-flow
Шон Дж. Гофф
источник
источник
Ответы:
Очень универсальная версия
do ... while
имеет следующую структуру:Примером является:
Поскольку он установлен (значение не установлено
i
), цикл выполняется 20 раз.Не комментируя строку, которая установлена
i
в 16i=16
, цикл выполняется 4 раза.Для
i=16
,i=17
,i=18
иi=19
.Если в той же точке (начало) установлено значение i (скажем, 26), команды все равно выполняются в первый раз (до тех пор, пока не будет проверена команда прерывания цикла).
Тест на некоторое время должен быть правдивым (статус выхода 0).
Тест следует поменять местами до цикла, т. Е. Быть ложным (состояние выхода не 0).
Версия POSIX нуждается в изменении нескольких элементов для работы:
источник
set -e
что-то неуспешное в блоке условия while, это не остановит выполнение: например,set -e; while nonexistentcmd; true; do echo "SHiiiiit"; exit 3; done
-> случится дерьмо. Таким образом, если вы используете это, вы должны быть очень осторожны с обработкой ошибок, то есть объединять все команды с&&
!Не существует цикла do ... while или do ... before, но то же самое можно выполнить следующим образом:
до тех пор, пока:
источник