簡體   English   中英

將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您可能有第一個通話結束了一天,而第二個通話則返回了第二天早晨的最開始。 為了避免這種風險,來電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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM