[英]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
您可能有第一個通話結束了一天,而第二個通話則返回了第二天早晨的最開始。 為了避免這種風險,來電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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.