首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环Bash在一次迭代后停止,没有错误

循环Bash在一次迭代后停止,没有错误
EN

Stack Overflow用户
提问于 2015-12-15 18:42:26
回答 3查看 2.7K关注 0票数 2

假设我有一个文件dates.json

代码语言:javascript
复制
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

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

代码语言:javascript
复制
#!/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

当我执行时,我得到以下信息:

代码语言:javascript
复制
$ bash example.sh dates.json
looking for 2015-11-01
looking for 2015-11-02

如果我没有猫的话..。该脚本行打印所有回显命令,如果我只尝试命令行上的cat \ grep命令,它就能工作。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-15 18:59:24

如果脚本的其他部分需要set -e,则需要处理grep以避免停止脚本:

代码语言:javascript
复制
# cat $file | grep "2015-11-0"$i > $i.json
grep "2015-11-0"$i "$file" > $i.json || :
票数 4
EN

Stack Overflow用户

发布于 2015-12-15 18:57:26

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

+

如果grep无法在文件中找到匹配项,则返回1。

+

dates.json没有2015-11-02

=

错误

票数 3
EN

Stack Overflow用户

发布于 2015-12-15 18:49:40

这是因为我们的集合-e导致脚本退出。去掉这一行,它就能工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34296991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档