我正在尝试创建一个脚本,运行时将访问/var/log/secure 文件并报告当天发生了多少次失败尝试,将输出附加到名为 failed 的文件中,格式如下:
日期:2014年2月15日时间:10:30 失败尝试次数:8
并且应该使用文件重定向在脚本内完成输出,以便标准输出进入 failed.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循环,认为i将是日期命令,mdy将显示mm/dd/yy,tme将是HH:MM,md将用于grep var/log/secure以查找失败的登录。
一旦我得到了我想要的输出,我将能够通过以下方式进行重定向 sh test.sh > failed.log 2> error.log
最佳答案
如果问题是关于重定向,我会这样做:
#!/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
关于需要 Linux 重定向帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22084640/