linux脚本执行时错误,请帮忙看看哪里出问题了。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux脚本执行时错误,请帮忙看看哪里出问题了。相关的知识,希望对你有一定的参考价值。
#!/bin/bash
# file name : intruder_detect.sh
#Descripe : this is a intruder detecting tool which look "auth.log"
# file as a input file.
AUTHLOG=/var/log/auth.log
if [[ -n $1 ]]
then
AUTHLOG=$1
echo "Using Log file : $AUTHLOG "
fi
LOG=/tmp/valid.$$.log
grep -v "invalid" $AUTHLOG > $LOG
users=$(grep "Failed password" $LOG | awk ` print $(NF-5) ` | sort | uniq)
printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s\n" "Sr#" "User" "Attempts" "Ipaddress" "Host_Mapping" "Time range"
ucount=0
ip_list="$(egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" $LOG | sort | uniq)"
for ip in ip_list
do
grep $ip $LOG > /tmp/temp.$$.log
for user in users
do
grep $user /tmp/temp.$$.log > /tmp/$$.log
cut -c-16 /tmp/$$.log > $$.time
tstart=$(head -1 $$.time)
start=$(date -d "$tstart" "+%s")
tend=$(tail -1 $$.time)
end=$(date -d "$tend" "+%s")
limit=$(($end-$start))
if [ $limit -gt 120 ]
then
let uconut++
IP=$(egrep -o "[9-0]+\.[9-0]+\.[9-0]+\.[9-0]+" /tmp/$$.log | head -1)
TIME_RANGE="$tstart-->$tend"
ATTEMPTS=$(cat /tmp/$$.log | wc -1)
HOST=$(host $IP | awk `print $NF)`)
printf "%-5s|%-10s|%-10s|%-33s|%s\n" "$ucount" "$user" "$ATTEMPTS"
"$IP" "$HOST" "$TIME_RANGE"
fi
done
done
rm /tmp/valid.$$.log $$.time /tmp/temp.$$log /tmp/$$.log 2> /dev/null
脚本执行,出现错误,如下:
./intrader_detect.sh: command substitution: line 17: syntax error: unexpected end of file
文件事直接在gedit里面编辑的
# file name : intruder_detect.sh
#Descripe : this is a intruder detecting tool which look "auth.log"
# file as a input file.
AUTHLOG=/var/log/auth.log
if [[ -n $1 ]]
then
AUTHLOG=$1
echo "Using Log file : $AUTHLOG "
fi
LOG=/tmp/valid.$$.log
grep -v "invalid" $AUTHLOG > $LOG
users=$(grep "Failed password" $LOG | awk ` print $(NF-5) ` | sort | uniq)
printf "%-5s|%-10s|%-10s|%-13s|%-33s|%s\\n" "Sr#" "User" "Attempts" "Ipaddress" "Host_Mapping" "Time range"
ucount=0
ip_list="$(egrep -o "[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+" $LOG | sort | uniq)"
for ip in ip_list
do
grep $ip $LOG > /tmp/temp.$$.log
for user in users
do
grep $user /tmp/temp.$$.log > /tmp/$$.log
cut -c-16 /tmp/$$.log > $$.time
tstart=$(head -1 $$.time)
start=$(date -d "$tstart" "+%s")
tend=$(tail -1 $$.time)
end=$(date -d "$tend" "+%s")
limit=$(($end-$start))
if [ $limit -gt 120 ]
then
let uconut++
IP=$(egrep -o "[9-0]+\\.[9-0]+\\.[9-0]+\\.[9-0]+" /tmp/$$.log | head -1)
TIME_RANGE="$tstart-->$tend"
ATTEMPTS=$(cat /tmp/$$.log | wc -1)
HOST=$(host $IP | awk `print $NF)`) #这个地方有问题,按照你的意思是应该改成:HOST=$(host $IP | awk 'print $NF')
printf "%-5s|%-10s|%-10s|%-33s|%s\\n" "$ucount" "$user" "$ATTEMPTS"
"$IP" "$HOST" "$TIME_RANGE"
fi
done
done
rm /tmp/valid.$$.log $$.time /tmp/temp.$$log /tmp/$$.log 2> /dev/null追问
这个跟上面那个有何不同之处啊,大虾。。日。。照书上抄都过不了。。真心伤了。。
追答我刚才复制你的然后发表是方便好看,关键字会标红,你按照我给你说的那个地方改改看,应该没啥问题了
等会我给你改一下吧,刚才没有开linux虚拟机,你里面的awk部分用错了
照你说的,改了。。还是提示那行syntax error: unexpected end of file
,谢谢了。
字数限制了,给你发下我改的地方,我这边运行没有报错,
users=$(grep "Failed password" $LOG | awk ' print $(NF-5)' |sort|uniq) #这个地方是单引号',不是`
for ip in $ip_list #这个地方引用变量值需要加上$
for user in $users #这个地方引用变量值需要加上$
HOST=$(host $IP | awk 'print $NF') #这个地方是单引号',不是`
嗯。好了。大虾好人。。刚才你用的是什么编辑器啊,为什么截图后还可以复制里面的代码啊?截图工具问题?
追答下面我画红线的是截图,不能复制文字的。第一个是在代码语言里选择对应的语言,会把关键字标亮。你是在考试?
追问没啊。。工作了。以前做硬件的,现在要弄软件啊。。。就是第一个,那是截图吧?。为什么里面的代码可以被复制粘贴啊
追答第一个不是截图,是你编辑框那里有一个 代码语言的下拉框,选择对应的语言,关键字就标亮了
参考技术A #/斌/ bash的读取-P“请输入(Y / N):”YN
如果[“$ YN”==“Y”] | | [“$ YN” ==“Y”],然后
回声“OK,继续”
elif的[“$ YN”==“N”] | | [“$ YN”==“N” ],然后
回声“哦,打断!”
回声“我不知道你的选择是”
试试这个,让你不知道! Path是路径,shell程序
以上是关于linux脚本执行时错误,请帮忙看看哪里出问题了。的主要内容,如果未能解决你的问题,请参考以下文章
求大神帮忙看看c语言编程哪里出问题了,文件始终是空白,无法写入。
linux运行一个TCP服务器端程序,总是提示”段错误“,麻烦帮我看看到底哪里出了问题?