for bash脚本中的循环

时间:2015-04-24 15:42:46

标签: bash ubuntu

我对bash脚本完全不熟悉。在使用它作为我的实际要求之前,我正在尝试做一些非常基本的事情。我编写了一个简单的代码,它应该打印test code与文件夹中文件数一样多的次数。

我的代码:

for variable in `ls test_folder`; do
    echo test code
done

" test_folder"是一个文件夹,它存在于bash.sh文件所在的同一目录中。

问题:如果文件数为1,则会打印一次,但如果文件数超过1,则会打印不同的计数。例如,如果" test_folder"中有2个文件。然后,test code被打印3次。

3 个答案:

答案 0 :(得分:2)

只需使用shell模式(又名glob):

for variable in test_folder/*; do
    # ...
done

您必须调整代码,以弥补variable包含test_folder/foo.txt而非foo.txt之类的事实。幸运的是,这很容易;一种方法是用

启动循环体
variable=${variable#test_folder/}

删除glob引入的前导目录。

答案 1 :(得分:1)

永远不要遍历ls的输出!由于word splitting文件名称中包含空格将是一个问题。当然,您可以将IFS设置为$ \n,但UNIX中的文件也可以在其名称中添加换行符。

改为使用find

find test_folder -maxdepth 1 -mindepth 1 -exec echo test \;

答案 2 :(得分:0)

这应该有效:

cd "test_folder"
for variable in *; do
#your code here
done
cd ..

variable将仅包含文件名