管道 cat/grep/arguments 到 bash 脚本中的变量
Pipe cat/grep/arguments into variable in bash script
#!/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
运行 从命令行,上面产生了预期的输出。
文件名是$HOUR
。做到 grep "$DATE $HOUR"
首先 -- 因为您没有在展开式周围加上引号,它们将作为单独的参数传递给 grep
。字符串拆分和通配的第一个结果 $DATE $HOUR
成为 grep
搜索的文件名,随后的结果成为要搜索的文件名。
除此之外,在同一个脚本中多次调用 date
无论如何都是一个坏主意。如果你的脚本是 运行 随着时间过去午夜怎么办?您可以让 date
的第一个电话是在一天结束时,而第二个 return 是在第二天早上的开始。为避免这种风险,请仅调用一次 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
#!/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
运行 从命令行,上面产生了预期的输出。
文件名是$HOUR
。做到 grep "$DATE $HOUR"
首先 -- 因为您没有在展开式周围加上引号,它们将作为单独的参数传递给 grep
。字符串拆分和通配的第一个结果 $DATE $HOUR
成为 grep
搜索的文件名,随后的结果成为要搜索的文件名。
除此之外,在同一个脚本中多次调用 date
无论如何都是一个坏主意。如果你的脚本是 运行 随着时间过去午夜怎么办?您可以让 date
的第一个电话是在一天结束时,而第二个 return 是在第二天早上的开始。为避免这种风险,请仅调用一次 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