[英]Linux redirection help needed
我正在尝试创建一个脚本,该脚本在运行时将访问/ var / log / secure文件并报告当天发生了多少次失败的尝试,然后将输出以这种格式添加到名为failed的文件中:
日期:02/15/14时间:10:30失败尝试次数: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.