#!/bin/bash
DATE=`date +%Y-%m-%d`
HOUR=`date +%H`
ORDERS_THIS_HOUR=`cat cli.log | grep $DATE $HOUR | grep -o "generated for Production" | wc -l`
OUTPUT="$DATE $HOUR : $ORDERS_THIS_HOUR"
echo "$OUTPUT" >> flow_productivity.log
问题在于第二行:grep: 14: No such file or directory
。
这是一个示例命令,我想将其结果存储在$ORDERS_THIS_HOUR
:中
cat cli.log | grep "2019-02-13 12" | grep -o "generated for Production" | wc -l
从命令行运行,以上操作将产生预期的输出。
首先——因为您没有在展开中加引号,所以它们作为单独的参数传递给grep
。字符串拆分和globbing的第一个结果$DATE $HOUR
将成为grep
搜索的文件名,随后的结果将成为要搜索的文件。
除此之外,无论如何,在同一个脚本中多次调用date
都是个坏主意。如果你的脚本是在午夜运行的呢?你可以在一天结束时给date
打第一个电话,第二个电话在第二天早上一开始就回。为了避免这种风险,请只调用date
一次,如下所示:
now=$(date '+%Y-%m-%d %H')
msg="generated for Production"
orders_this_hour=$(grep -Ec "($now.*$msg|$msg.*$now)" <cli.log)
output="$now : $orders_this_hour"
echo "$output" >> flow_productivity.log
它使用$HOUR
作为文件名。使其成为grep "$DATE $HOUR"