添加总计到bash脚本

时间:2016-01-06 18:31:08

标签: bash function for-loop while-loop

我正在运行一个bash脚本,该脚本查看错误日志并生成一个在Mac终端中打印的报告。

目前,输出如下:

This error report is derived from Command Logs from ________ to __________.

IP addresses:

109.xx.xxx.xxx

Error Codes List: 

(code 12)
(code 30)

Common Errors - Count: 

Code 2: 
Code 10: 
Code 11: 
Code 12: 237
Code 14: 
Code 20: 
Code 23: 
Code 30: 5
Code 35: 
Code 37: 
Code 52: 
/usr/local/bin/backerr: line 45: `$skipping': not a valid identifier
Total: 242

Total Files Transferred: 
3558

Count complete.

The following are details for each error:   
// all of the 242 above-referenced lines //

Skipped files: 
// lists all of the lines that have the word 'skipping\ ' //

如您所见,我没有正确的标识符:

    /usr/local/bin/backerr: line 45: `$skipping': not a valid identifier

这是我必须使用'跳过\'来检测行的代码。在其中,计算总数,并打印代码XX下的总数:总计在上面。另外,我想要跳过'总计将添加到'总计:242'。

  count=()
  total=0

  while read skipping; do
        (( count[$skipping]++, total++ ))      
  done < <(grep 'skipping\ ' $input_variable)

  for $skipping in $input_variable; do
    echo "Skipped: ${count[$skipping]}"
  done

我预期的输出&#34;常见错误 - 计数:&#34;部分应如下:

    Common Errors - Count: 

    Code 2: 
    Code 10: 
    Code 11: 
    Code 12: 237
    Code 14: 
    Code 20: 
    Code 23: 
    Code 30: 5
    Code 35: 
    Code 37: 
    Code 52: 
    Skipped: 107 (I made up this number for this question)
    Total: 349

我被困在这里。请帮忙。

作为解决方法,而不是使用下面的代码:

      while read skipping; do
            (( count[$skipping]++, total++ ))      
      done < <(grep 'skipping\ ' $input_variable)

      for $skipping in $input_variable; do
        echo "Skipped: ${count[$skipping]}"
      done

我将其替换为:

  echo "Total Skipped Files: " ; egrep -c 'skipping' $input_variable ;

但是,这并没有像我原先设想的那样产生理想的结果。

1 个答案:

答案 0 :(得分:2)

您的for循环不应该为索引变量设置美元符号:

for skipping in $input_variable; do
   ^^^