Bash条件为grep不产生预期输出

时间:2014-02-28 06:50:25

标签: linux bash shell

#!/bin/bash

projectsForArchive = /选择/ TIBCO /运行/ tibbpma /日志/选择/ TIBCO /运行/ tibbpmb /日志,/选择/ TIBCO /运行/ tibbpmd /日志

archiveScriptLogsDir = /选择/ TIBCO /脚本/ LogsArchival /归档日志

backupScriptLogsDir = /选择/ TIBCO /脚本/ LogsArchival / BACKUPLOGS

dir = $(echo $ projectsForArchive | tr“,”“\ n”)

d = $(ls / opt / tibco / run / | grep tibbpmd)

echo $ d

for find $dir -maxdepth 1 -iname "*.log.*"

DO

G = $ {I}

如果[$(ls / opt / tibco / run / | grep tibbpma)=“tibbpma”];那么

mv "$i" "${g}_tibbpma_`hostname`_`date +%Y-%m-%d-%H-%M-%s`"

elif [$(ls / opt / tibco / run / | grep tibbpmd)=“tibbpmd”];然后

 mv "$i" "${g}_$d_`hostname`_`date +%Y-%m-%d-%H-%M-%s`"

否则

mv "$i" "${g}_`hostname`_`date +%Y-%m-%d-%H-%M-%s`"

网络连接

完成

for find $dir -maxdepth 1 -iname "*.log.*"

做echo $ i

mv $ i $ archiveScriptLogsDir

完成

输出低于,这是不正确的

a.log.1.tibbpma.xxxxx

a.log.2.tibbpma.xxxxx

d.log.1.tibbpma.xxxxx

d.log.2.tibbpma.xxxxx

并正确输出

a.log.1.tibbpma.xxxxx

a.log.2.tibbpma.xxxxx

d.log.1.tibbpmd.xxxxx

d.log.2.tibbpmd.xxxxx

请帮忙

2 个答案:

答案 0 :(得分:1)

根据评论中给出的ls /opt/tibco/run/提问者的输出,它总是包含“tibbpma”,然后是第一个if语句中的条件

if [ $(ls /opt/tibco/run/ | grep tibbpma ) = "tibbpma" ];then

也永远都是真的。这就是为什么这个脚本的输出只包含“tibbpma”。

答案 1 :(得分:1)

avoid parsing ls output有很多理由,无论如何都不需要。

对于记录而言,简单地使用whatever | grep -q required比在反引号中运行grep命令并比较输出要好得多。 grep -q只是告诉你正则表达式是否匹配,没有输出,也没有花哨的语法。

同样,对于记录,除非您特别要求shell对值进行分词(您几乎从不这样做),否则应始终对引号进行双引号。

最后,要小心缩进。

source /home/tibco/script/config.cfg
dir=$(echo "$projectsForArchive" | tr "," "\n")

for i in `find $dir -maxdepth 1 -iname "*.log.*" `
do
  if [ -e /opt/tibco/run/tibbpma ];then
    dest="${g}_tibbpma_`hostname`_`date +%Y-%m-%d-%H-%M-%s`"
  elif [ -e /opt/tibco/run/tibbpmd ];then
    dest="${g}_tibbpmd_`hostname`_`date +%Y-%m-%d-%H-%M-%s`"
  else
    dest="${g}_`hostname`_`date +%Y-%m-%d-%H-%M-%s`"
  fi
  g=${i}
  mv "$i" "$dest"
done

for i in `find $dir -maxdepth 1 -iname "*.log.*" `
do
  echo "$i"
  mv "$i" "$archiveScriptLogsDir"
done

我很想在第一个循环中移动第二个循环,但是我不确定是否存在因某些原因无效的情况。您希望在脚本运行时出现新文件吗?