我的KornShell(ksh)脚本中有一个循环,我想要至少执行一次,我想要一种优雅的方式来做这件事,但是当我找到很多关于如何编写while循环的东西时,那里似乎没有任何东西可以做...在那里循环。
我正在做的是从配置文件中读取逗号分隔的文件列表并进行处理。如果文件列表为空,那么我想处理目录中的所有文件。
这样做的好方法是什么?
编辑:这是我目前的情况。我抓取文件名,然后从字符串中删除它以进行下一次传递。如果Files列表为空,我退出循环。但是,如果列表开头为空,我希望它仍然运行一次。 while [[ -n "${FILES%%,*}" ]]; do
FILE="${FILES%%,*}"
FILES="${FILES#*,}"
done
答案 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
)模拟此内容。