Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash函数只从字符串中写入文件中的一个单词_Bash - Fatal编程技术网

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

Bash函数只从字符串中写入文件中的一个单词,bash,Bash,我正在编写一个脚本来清理工作系统上的日志文件。 在那里,我为维护创建了日志记录。 只有日志记录写一个单词而不是句子 这里是我使用的bash代码 #!/bin/bash FILEDIR=/<file>/<directory> COPYDIR=/</ LOGDIR=/mnt/orabackup/??IPLUS/pmt/log/ INFO="[INF] :" INFO1="There are no files found

我正在编写一个脚本来清理工作系统上的日志文件。 在那里,我为维护创建了日志记录。 只有日志记录写一个单词而不是句子

这里是我使用的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
而不是整句话,比如:

 20151224T08:15:28 : [INF] :There are no files found for cleanup.
我不知道我做错了什么。如果我附和这句话,它就行了。
有人能帮我吗?

你可以使用
awk

awk '{print $1,$2,$3}' file.log

您可以使用
awk

awk '{print $1,$2,$3}' file.log

writelog
仅将其第一个参数写入日志。调用时需要引用变量,以便它们都位于单个参数中,而不是拆分为单独的单词

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

养成总是引用变量的习惯。很少需要对变量展开的结果执行分词或通配符展开。当您这样做时,您应该知道它。

writelog
只将其第一个参数写入日志。调用时需要引用变量,以便它们都位于单个参数中,而不是拆分为单独的单词

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

养成总是引用变量的习惯。很少需要对变量展开的结果执行分词或通配符展开。当您这样做时,您应该知道它。

writelog
只将
$1
写入文件。这只是函数的第一个参数。请查看:
writelog
仅将
$1
写入文件。这只是函数的第一个参数。请看一看:谢谢Barmar,你的答案非常有用。谢谢Barmar,你的答案非常有用。