当前位置: 首页 > 知识库问答 >
问题:

Bash for循环在一次迭代后停止,没有错误[重复]

卓俊晖
2023-03-14

假设我有一个文件dates.json

2015-11-01T12:01:52
2015-11-03T03:58:57
2015-11-09T02:43:59
2015-11-10T08:22:00
2015-11-11T05:14:51
2015-11-11T12:47:02
2015-11-13T08:33:40

我想根据日期将行分隔为不同的文件。我制作了以下脚本:

#!/bin/bash
set -e
file="$1"
for i in $(seq 1 1 31); do
    if [ $i -lt 10 ]; then
      echo 'looking for 2015-11-0'$i
      cat $file | grep "2015-11-0"$i > $i.json
    else
      echo 'looking for 2015-11-'$i
      cat $file | grep "2015-11-"$i > $i.json
    fi
done

当我执行时,我得到以下内容:

$ bash example.sh dates.json
looking for 2015-11-01
looking for 2015-11-02

如果我在没有cat...行的情况下尝试,脚本会打印所有的回显命令,如果我在命令行上只尝试cat|grep命令,它就可以工作。

你知道为什么它会这样吗?

共有3个答案

刘和昶
2023-03-14

这是因为我们的set-e导致脚本退出。拆下这条线,它就会工作了

应涵容
2023-03-14

set-e如果命令以非零状态退出,则强制脚本退出。

如果在文件中找不到匹配项,grep将返回1。

日期。json没有2015-11-02

=

错误

史逸春
2023-03-14

如果需要在脚本的其他部分设置-e,则需要处理grep,而不是停止脚本:

# cat $file | grep "2015-11-0"$i > $i.json
grep "2015-11-0"$i "$file" > $i.json || :
 类似资料:
  • 问题内容: 这是我的内容: 在Jenkins中使用Pipeline插件执行作业时,仅打印列表中的第一项。 有人可以向我解释这种奇怪的行为吗?是虫子吗?还是只是我不了解Groovy语法? 编辑 :预期的作品: 问题答案: 此处接受的答案指出这是一个已知的错误,并且使用了对我不起作用的解决方法,因此,我将提供我最近发现的更新。 尽管有了JENKINS-26481的解决方案(在撰写本文时,它还算是最近的

  • 我如何在x个循环之后暂停我的循环x秒? 我的循环逐行读取IP地址列表。在50个循环之后,它应该暂停x秒,直到循环继续。

  • 我正在尝试获取一个

  • 如果格式不正确,请原谅,这是我的第一篇帖子。我想看看是否以前发现过这个问题,但我找不到任何人有与我相同的问题。 我试图学习Java,但我无法弄清楚为什么我的for循环没有输出最后一次迭代。我正在完成codeabbey的练习,并相对轻松地完成了前两个。然而,在第三个和第四个问题上,我无法在最后一次迭代中输出我的for循环。 我开始在谷歌上搜索,并想将我的答案与其他人的答案进行比较。当我的代码与我找到

  • 我的目标是创建一个有三个“玩家”对象的“猜谜游戏”。 我创建了一个名为“target”的变量,其中包含用户的输入。 之后,我对三个“玩家”对象中的每一个运行“猜测”方法,然后运行while循环,直到它被打破。循环中的if语句检查玩家对象的猜测是否等于目标,如果该语句为真,则中断循环。 问题是循环在一次迭代后就停止了。 以下是代码:

  • 问候stack overflowers查看这个问题的同事,我是一个在Java中玩赛艇游戏的业余爱好者,目前面临一个问题,即for循环中的try块即使输入无效也会立即迭代到下一个循环。for循环包含一个用于发起掷骰子的输入,掷骰子函数位于一个单独的类中,当输入不是“y”时,它将抛出一个异常。try块在不在for循环中时工作得很好,但是当放在for循环中时,即使输入无效,它也会自动迭代循环。