每次运行bash脚本时都使用计数器

时间:2014-07-15 05:53:47

标签: bash loops counter let

想象一下,我有一个包含这些文件的目录:

file-1.txt  file-2.txt ...

我想为我的bash写一个条件并检查是否存在 file-2.txt 然后将输出写入 file-3.txt

示例bash脚本文件:

while read line;do
    <A command here> #could be anything
    if [ "$?" -eq "0" ]; then
        echo "$line" >> file-$counter.txt  #Pay attention to counter here
    fi
done < $LIST

当bash运行完毕并停止时。然后我想再次运行它。现在我想知道如果最后一个文件是等等等,然后告诉计数器将输出写入新文件。

1 个答案:

答案 0 :(得分:1)

您可以使用一系列命令获取文件的最后一个数字,然后添加一个以获取下一个命令:

pax> ll file-*.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-1.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-10.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-11.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-12.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-13.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-14.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-15.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-2.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-3.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-4.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-5.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-6.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-7.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-8.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-9.txt

pax> next=$(expr $(ls -1 file-*.txt |sed 's/file-//;s/.txt$//' |sort -nk1 |tail -1) + 1)

pax> echo $next
16

然后你可以用它来创建下一个:

pax> touch file-${next}.txt

pax> ll file-*.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-1.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-10.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-11.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-12.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-13.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-14.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-15.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:23 file-16.txt  <== here it is
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-2.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-3.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-4.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-5.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-6.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-7.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-8.txt
-rw-r--r-- 1 pax None 0 Jul 15 14:01 file-9.txt

按命令断开该行向下命令:

ls -1 file-*.txt           # get all files one per line.
sed 's/file-//;s/.txt$//'  # get rid of "file-" and '.txt', leaves numbers only.
sort -nk1                  # numerically sort (1..15).
tail -1                    # get last entry only (15).
expr $(... + 1)            # add one (16).
next=$(...)                # assign it to "next" variable.

解析ls的输出并不总是一个好主意,因为文件名有时可能包含不常见的字符。但是,如果你能保证它们符合你的规格,那就可以了。