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里面编辑的

#!/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)`) #这个地方有问题,按照你的意思是应该改成: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服务器端程序,总是提示”段错误“,麻烦帮我看看到底哪里出了问题?

单片机是ATmega48的,写了个24C02的程序,但是程序一直没能进去,麻烦大侠们帮忙看看哪里出了问题。

linux在执行命令ok,但是写入脚本就错误,怎么解

执行 powershell 脚本时出错