#!/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
请帮忙
答案 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
我很想在第一个循环中移动第二个循环,但是我不确定是否存在因某些原因无效的情况。您希望在脚本运行时出现新文件吗?