【问题标题】:Using line count as a counter to break a while loop in Bash使用行数作为计数器来打破 Bash 中的 while 循环
【发布时间】:2015-11-05 04:25:10
【问题描述】:

是否可以使用行数来打破 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 为空时,它会继续运行。有人可以帮忙吗?

谢谢。

【问题讨论】:

  • 请缩进一点,向我们展示您的研究成果。这么小的sn-p问题太多了。
  • 这就是你的意思吗,HuStmpHrrr? :)

标签: bash while-loop conditional-statements


【解决方案1】:

在您的条件$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

【讨论】:

  • 使用$(wc -l < Database.faa) 避免调用cut
  • 谢谢你们俩。太有帮助了! :)
猜你喜欢
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 2016-08-06
相关资源
最近更新 更多