KornShell(ksh)有Do ... While循环吗?

时间:2012-02-07 15:43:51

标签: shell unix scripting ksh

我的KornShell(ksh)脚本中有一个循环,我想要至少执行一次,我想要一种优雅的方式来做这件事,但是当我找到很多关于如何编写while循环的东西时,那里似乎没有任何东西可以做...在那里循环。

我正在做的是从配置文件中读取逗号分隔的文件列表并进行处理。如果文件列表为空,那么我想处理目录中的所有文件。

这样做的好方法是什么?

编辑:这是我目前的情况。我抓取文件名,然后从字符串中删除它以进行下一次传递。如果Files列表为空,我退出循环。但是,如果列表开头为空,我希望它仍然运行一次。

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

3 个答案:

答案 0 :(得分:9)

是的,while中的标准ksh循环支持开箱即用:

while ...; do ...; done

标准while循环在之前的代码块 do之后的

每个块可能包含多个命令。通常我们只使用 第一个块的单个命令,其退出状态确定是否 循环终止或继续。

当我们使用多个命令时 最后一个命令的状态很重要。

while
   echo do this always # replace with your code
   [[ -n "${FILES%%,*}" ]]
do
   FILE="${FILES%%,*}"                             
   FILES="${FILES#*,}"
done

答案 1 :(得分:4)

你可以伪造它:

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

  do_once=false
done

答案 2 :(得分:1)

ksh中没有这样的构造。您可以在break循环结束时通过continue(或while true; do ... ; done)模拟此内容。