Есть ли в KornShell (ksh) цикл Do ... While? - PullRequest
2 голосов
/ 07 февраля 2012

У меня есть цикл в моем скрипте KornShell (ksh), который я хочу выполнить хотя бы один раз, и я хочу элегантный способ сделать это, однако, хотя я нашел много материала о том, как написать цикл while, тампохоже, ничего не делать для цикла do ... while.

То, что я делаю, - это чтение списка файлов с разделителями-запятыми из файла конфигурации и их обработка.Если список файлов пуст, то я хочу обработать все файлы в каталоге.

Какой хороший способ сделать это?

РЕДАКТИРОВАТЬ: Вот то, что у меня есть в настоящее время.Я беру имя файла, затем удаляю его из строки для следующего прохода.Если список файлов пуст, я выхожу из цикла.НО, если список пуст для начала, я хочу, чтобы он все еще запускался один раз.

  while [[ -n "${FILES%%,*}" ]]; do
       FILE="${FILES%%,*}"                             
       FILES="${FILES#*,}"
  done

Ответы [ 3 ]

9 голосов
/ 03 августа 2012

Да, стандартный цикл while в ksh поддерживает это "из коробки":

while ...; do ...; done

Стандартный цикл while имеет кодовые блоки до и после do.

Каждый блок может содержать несколько команд. Традиционно мы используем только одиночная команда для первого блока, и ее состояние выхода определяет, цикл завершается или продолжается.

Когда мы используем несколько команд, только статус последней команды имеет значение.

while
   echo do this always # replace with your code
   [[ -n "${FILES%%,*}" ]]
do
   FILE="${FILES%%,*}"                             
   FILES="${FILES#*,}"
done
4 голосов
/ 07 февраля 2012

Вы могли бы подделать это:

do_once=true
while $do_once || [[ other condition ]]; do
  : your stuff here

  do_once=false
done
1 голос
/ 07 февраля 2012

Нет такой конструкции в ksh.Вы можете эмулировать это с помощью break (или continue) в конце цикла while true; do ... ; done.

...