Как повторить цикл n раз в Bash

У меня ниже сценарий, как:

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

3 Solutions collect form web for “Как повторить цикл n раз в Bash”

Есть много способов сделать этот цикл.

С синтаксисом 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 

Если count является переменной, вы можете использовать команду seq :

 count=10 for i in $(seq $count) do whatever done 
 n=0 until [ "$((n+=1))" -gt 10 ] do  

хотя test -e file && exit более гибкий

  • Преобразование рабочей команды в файл сценария оболочки, который получает аргументы
  • Параллельные процессы: добавление выходных данных в массив в скрипте bash
  • Crontab не работает или ошибка скрипта?
  • Вывод команды readlink
  • Хотите скачать резервную копию моей базы данных через скрипт bash
  • Как я могу улучшить ниже псевдоним?
  • Как удалить содержимое перед шаблоном в XML с помощью Unix
  • Нужно выполнить логику по соединению sftp
  • Является ли использование исходного файла, уже полученного в родительском скрипте, необязательным?
  • shell: оценить выражение curl
  • Как я могу обобщить команду awk в скрипт? (извлечение / перестановка столбцов из файла)
  • Interesting Posts

    Итерация через подкаталоги и получение двух файлов в качестве аргументов для awk-скрипта

    Использует ли потоки все еще считающиеся анти-шаблонами?

    чистый метод обработки нескольких операционных систем на нескольких дисках

    Перекрестное компиляция программного модуля

    Запустите .zshrc при передаче команды через -c

    Невозможно локально проверить полномочия эмитента

    Как я могу защитить метки SELinux от изменения?

    Postfix: заставить локальных пользователей (PHP) использовать SMTPD для внешних получателей

    Как переключаться между сеансом tty и xorg

    перезаписать данные раздела ext4 без предварительного удаления

    Как заменить строку файла, который присутствует в файле tar через UNIX

    Функция петли зависит от шаблона

    Не удается найти исходный код GNU Icecat (или Firefox)

    В Ubuntu нет панелей? libcanberra-tk не может открыть файл общих объектов

    Анализ XML, JSON и новых форматов файлов данных в UNIX с помощью служебных программ командной строки

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