Bash函数只从字符串中写入文件中的一个单词

时间:2015-12-24 09:11:39

标签: bash

我正在编写一个脚本来清理正在运行的系统上的日志文件。 因为我已经创建了一个维护日志。 只有日志记录会写一个单词而不是句子。

这是我使用的bash代码。

    #!/bin/bash
    FILEDIR=/<file>/<directory>
    COPYDIR=/</
    LOGDIR=/mnt/orabackup/??IPLUS/pmt/log/
    INFO="[INF] :" 
    INFO1="There are no files found for cleanup."
    INFO2="There are files found for cleanup."

    ERROR="[ERR] :"
    ERROR1="there was a error while running the script." 
    ERROR2="(Error while cleanup files whitout pid)"
    ERROR3="(Error while cleanup large files whit pid)"
    function writelog
    {
        string=$1
        echo $(date +%Y%m%dT%H:%M:%S) ": ${string}"  >> ${LOGDIR}script.log
    }

    for NOPID in $(ls -1 ${FILEDIR}*.trc|awk -F "_" '{print $3}'|awk -F "." '{print $1}' |uniq)
      do 
        ps -ef|grep oracle|grep -v grep|grep -v LOCAL|grep -v "su -"|grep $NOPID > /dev/null
      if [ $? = 1 ]
      then 
        ls -1sh ${FILEDIR} | grep $NOPID > ${LOGDIR}${TIMESTAMP}deleted_logs_whitout_pid.log
        rm -f ${FILEDIR}*$NOPID.tr?
      elif [ $? = 0 ]
      then 
        writelog ${INFO}${INFO1}
      else 
        writelog ${ERROR}${ERROR1}${ERROR2}
      fi
    done

当我执行脚本并从writelog函数查看创建的日志文件时,它只记录日期戳和第一个单词,如:

20151224T08:15:28 : [INF]

而不是整个句子如:

 20151224T08:15:28 : [INF] :There are no files found for cleanup.

我不知道我做错了什么。如果我回应它的说法是有效的。 有人可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

您可以使用function handleControl(e) { var id = e.target.getAttribute("id"); }

awk

答案 1 :(得分:0)

writelog只将第一个参数写入日志。你需要在调用变量时引用变量,这样它们才会在一个参数中,而不是分成单独的单词。

 then 
    writelog "${INFO}${INFO1}"
  else 
    writelog "${ERROR}${ERROR1}${ERROR2}"
  fi

养成始终引用变量的习惯。您需要对变量扩展的结果执行分词或通配符扩展是非常罕见的。当你这样做时,你应该知道它。