ksh, выполнить действие при достижении максимального значения цикла

Я хочу написать небольшой скрипт оболочки korn, который выполняет 5 тестов (ожидая некоторое время перед каждым), а затем, если все они не работают, выполняет действие.

Я смотрел на что-то вроде:

for i in {1..5} do "doMyTest" #it fills a variables "status" (but can unfortunately fails) if [ "$status" ]; then #if status is filled then we can leave the loop break fi sleep 3 #else wait some time before doing another try done if [ -z "$status" ]; then exit 1 fi ... then the rest of my program 

Вы хоть представляете, как я могу сделать это лучше? Это звучит немного избыточно …

3 Solutions collect form web for “ksh, выполнить действие при достижении максимального значения цикла”

 set -- while [ "$(($#>5))" -eq "-${#status}" ] do "test"; ${status:+":"} sleep 3 set '' "$@" done 

Если вы проверите по дополнению, вы можете часто делать много больше с одним тестом.

Вы можете избежать двойной проверки $status , выполнив это следующим образом:

 for i in {1..5} do "doMyTest" #it fills a variables "status" (but can unfortunately fails) if [ -n "$status" ]; then #if status is filled then we can leave the loop break elif [ $i -eq 5 ]; then exit 1 #all the tests failed, exiting fi sleep 3 #else wait some time before doing another try done 

Мой принятый ответ на SO: Если вы хотите только увидеть сбой, когда все тесты не пройдут? Когда вы можете пропустить другие тесты, когда один тест пройдет успешно, вы можете использовать

 test1 || sleep 3 && \ test2 || sleep 3 && \ test3 || sleep 3 && \ test4 || sleep 3 && \ test5 || exit 1 
  • Как найти старые каталоги в локальном каталоге, используя find в AIX?
  • как избежать необычных / uniq-символов из сценариев ожидания?
  • Использование sed для цветного вывода из команды на Solaris
  • Сравните два массива в KSH и выведите разницу
  • Как правильно уловить опциональные и необязательные аргументы?
  • ksh "<< EOF", чтобы изменить пользователя
  • KSH - если / then / else против двойных усилителей (&&) и двойных труб (||)
  • Выполнение сценария оболочки на нескольких серверах
  • Как сравнить два значения float в ksh?
  • Каковы существенные различия между различными раковинами?
  • Есть ли способ суммировать размер перечисленных файлов?
  • Interesting Posts

    Cygwin и Tmux run-shell

    Игнорируйте эту переменную строку так, чтобы она не выводила

    Экспортируйте плейлист m3u в каталог, чтобы они отображались в списке воспроизведения

    Samba4's ldbsearch жалуется на аутентификацию для базовых поисков

    команда / opt / bin / date -date '-15 минут 2016-04-27T14: 14: 47' результат за много часов до указанного времени

    Как я могу проверить, какие терминальные определения доступны?

    Доступ к справочной странице ImageMagick

    Как выполнить цикл через несколько подкаталогов для поиска файлов с помощью bash

    Просмотр системных вызовов / активности ядра для ввода-вывода из работающего процесса

    Доступ WiFI в BackTrack 5 R1

    CSF не блокирует порт при удалении из csf.conf

    Терминальное имя pty в соответствии с IP-адресом источника

    Возможно динамически изменяемый размер раздела в файле .. возможно?

    Какие типы RAID поддерживает Linux?

    Найти и заменить различные столбцы с помощью awk

    Linux и Unix - лучшая ОС в мире.