繁体   English   中英

需要Linux重定向帮助

[英]Linux redirection help needed

我正在尝试创建一个脚本,该脚本在运行时将访问/ var / log / secure文件并报告当天发生了多少次失败的尝试,然后将输出以这种格式添加到名为failed的文件中:

日期:02/15/14时间:10:3​​0失败尝试次数:8

并且应该使用文件重定向在脚本内部完成输出,以便标准输出进入fail.log,标准错误进入error.log文件。

我的代码(test.sh)是这样的:

#!/bin/bash
 for i in $(date)

 do
 mdy=$($i "+%m/%d/%Y)
 md=$($i "+%m %d")
 tme=$($i "+ H:%M)
 fail=$(grep Failed /var/log/secure | grep $md | wc -l

 echo "Date: $mdy Time: $tme Number of failed attempts: $fail"

 done

我究竟做错了什么?

我做了for循环,认为我将是date命令,而mdy将显示mm / dd / yy,tme将是HH:MM,而md将用于grep var / log / secure来登录失败。

一旦获得所需的输出,就可以通过sh test.sh> failed.log 2> error.log进行重定向

也许您正在寻找这样的东西? 我真的不知道您希望它如何解析,但是使用这些变量,您就可以做到。 但是,我相信您的for循环并没有做您想要的。

#!/bin/bash
set -- $(date)
DAYNAME=$1; MONTH=$2; DAY=$3; TIME=$4; YEAR=$6
ATTEMPTS=$(grep -iw 'Failed\|$2\|$3' /var/log/secure | wc -l)
echo "Date: $MONTH $DAY $YEAR Time: $TIME Number of failed attempts: $ATTEMPTS"

如果问题是关于重定向的,我这样做是这样的:

#!/bin/bash

THIS_SCRIPT_NAME=$( basename $0 )
LOG_DIR='/var/log'
DATE_POSTFIX=$( date '+_%Y_%m_%d_%H_%M_%S' )
LOG_FILE="${LOG_DIR}/${THIS_SCRIPT_NAME}${DATE_POSTFIX}.log"

if [ ! -d "$LOG_DIR" ]; then
        mkdir -p "$LOG_DIR"
fi

exec 1>>"$LOG_FILE" 2>&1

只需删除不必要的部分并修复剩下的内容,您的脚本就可以像这样。 没有必要为一个for循环,如果你只是想处理一个日期。

#!/bin/bash
mdy=$(date "+%m/%d/%Y")
md=$(date "+%m %d")
tme=$(date "+%H:%M")
# Assuming the date stamp always precedes the message
fail=$(grep -c "$md.*Failed" /var/log/secure)
echo "Date: $mdy Time: $tme Number of failed attempts: $fail"

确实没有太多可能出错的地方; 主要是,如果您没有对/var/log/secure读取访问权限或不存在,则标准错误将包含一条消息。

有很多方法可以避免多次调用date ,但这几乎不会成为性能瓶颈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM