使用行计数作为计数器来破坏Bash中的while循环

时间:2015-08-12 13:54:08

标签: bash while-loop conditional-statements

是否可以使用行数来打破bash中的while循环?

我有以下代码,但它没有中断和无限运行:

wc -l Database.faa > counter
perl -p -e 's/ /\t/g' counter | cut -f6 > temp; mv temp counter

while
     ($counter > '0')
do

    # some commands

    wc -l Database.faa > counter
    perl -p -e 's/ /\t/g' counter | cut -f6 > temp; mv temp counter

done

我的程序在每次运行时都会减少Database.faa,但是当Database.faa为空时它会继续运行。有人可以帮忙吗?

感谢。

1 个答案:

答案 0 :(得分:2)

在您的条件$counter中,不会查看文件counter,这似乎是您在条件中尝试使用的内容。此外,(并不是测试值的传统方法,但您可以使用您正在创建的子shell的退出代码。您可能对[更感兴趣,这与test命令相同。最后,对于这一部分,当使用test >不是比较运算符时,它是一个重定向运算符。 man test显示您可以进行的比较,对于int比较,您可以使用-gt代替。所以把它放在一起就可以像

一样循环
counter=$(wc -l Database.faa | cut -f1 -d" ")
while [ $counter -gt 0 ]; do
     # some commands
     counter=$(wc -l Database.faa | cut -f1 -d" ")
done

或者,你可以测试文件是否为空,如

while [ -s Database.faa ]; do
    # some commands
done