如何在bash中按循环计数每次触摸文件?

时间:2014-01-18 06:52:34

标签: linux bash

我写了一个bash脚本,我做了:

 num=`wc -l /tmp/file.txt | awk '{sum += $1} END {print sum}'`
 #echo $num 
 #result is for example 29
 for i in {1..$num}
 do
       touch /tmp/pages/$i.txt
 done

我想触摸1.txt到29.txt(echo $ num ==> 29)

结果是错误的......

我怎么能像我说的那样写一个正确的循环......?

非常感谢你

2 个答案:

答案 0 :(得分:3)

如果您有seq,可以尝试

for i in $(seq $num)

但不是

num=`wc -l /tmp/file.txt | awk '{sum += $1} END {print sum}'`

你为什么不

num=$(wc -l < /tmp/file.txt)

我猜你不只是触摸循环内的文件
但是,如果这是你想要的,你可以使用awk

来做到这一点
awk '{system("touch /tmp/pages/"NR".txt")}' /tmp/file.txt

答案 1 :(得分:2)

问题是大括号扩展(例如{1..3,5}1 2 3 5)在参数扩展之前执行(例如$num29 ),所以前者不能依赖后者。在您的情况下,一个选项是使用算术(C风格)for - 循环:

for (( i = 1 ; i <= num ; ++i )) ; do
    touch /tmp/pages/$i.txt
done

(如果您习惯于这种for - 循环风格的语言,这是最吸引人的。如果您更喜欢foreach循环,那么使用外部seq实用程序,Ray的答案,可能是要走的路。)