我写了一个两部分的剧本,我之前称之为“bips.sh”和“chekdup.sh”,当我测试它时,它显示:
bips.sh: line 17: syntax error near unexpected token `fi'
bips.sh: line 17: `fi'
这是脚本:
---bips.sh---
#!/bin/bash -x
# find broadcast ip's that reply with 30+ dupes.
# i decided to make this script into two sections. when running this make
# sure both parts are in the same directory.
if [ $# != 1 ]; then
echo "$0 <domain - ie: college.edu>"
else
host -l $1 | grep 'has address' | cut -d' ' -f4 > $1.ips
cat $1.ips | cut -d'.' -f1-3 | sort |\
awk '{ print echo ""$1".255" }' > $1.tmp
cat $1.tmp | uniq | awk '{ print "./chekdup.sh "$1"" }' > $1.ping
rm -f $1.ips $1.tmp
chmod 700 $1.ping
./$1.ping
rm $1.ping
fi
脚本的第二部分
---chekdup.sh---
#!/bin/bash -x
# this checks possible broadcast ip's for a given amount of icmp echo
# replies.
ping -c 2 $1 > $1.out
if
cat $1.out | grep dupl > /dev/null
then
export DUPES="`cat $1.out | grep dupl | cut -d'+' -f2 | cut -d' ' -f1`"
else
export DUPES=1
fi
if [ $DUPES -gt 30 ]; then
echo "$1 had $DUPES dupes" >> bips.results
rm -f $1.out
else
rm -f $1.out
fi
注意:我更新了代码并且总是收到错误
答案 0 :(得分:1)
阅读该代码真是太痛苦了,我不得不重写它
#!/bin/bash -x
# find broadcast ip's that reply with 30+ dupes.
if (( $# != 1 )); then
echo "$0 <domain>"
echo "example: $0 college.edu"
exit
fi
host -l $1 |
awk '
/has address/ {sub(/[0-9]+$/, "255", $NF); ips[$NF]}
END {for (ip in ips) print ip}
' |
sort |
while read ip; do
dupes=$( ping -c 2 $ip | grep -oP 'dupl.*\+\K\S+' )
if [[ $dupes && $dupes -gt 30 ]]; then
echo "$ip had $dupes dupes"
fi
done >> bips.results