Bash 在循环中读取两个列表,并逐个检查整个列表
我正在用两种方式编写bash,但存在一个问题: (一) 我想逐个检查每个ip和所有端口 有什么想法吗Bash 在循环中读取两个列表,并逐个检查整个列表,bash,loops,heredoc,nmap,Bash,Loops,Heredoc,Nmap,我正在用两种方式编写bash,但存在一个问题: (一) 我想逐个检查每个ip和所有端口 有什么想法吗 然后,您可以在不同的文件描述符上重定向每个文件: while read -r -u3 port; do while read -r -u4 ip; do # do stuff with $port and $ip echo -n "$ip $port: " OUT=$( nmap -p "$port" --script=http-head
然后,您可以在不同的文件描述符上重定向每个文件:
while read -r -u3 port; do
while read -r -u4 ip; do
# do stuff with $port and $ip
echo -n "$ip $port: "
OUT=$( nmap -p "$port" --script=http-headers.nse "$ip" |
tail -n 13 |
awk -F: '{print $2; exit}' )
[[ $OUT == Apache ]] && echo right || echo wrong
done 4< "$2"
done 3< "$1"
读取时-r-u3端口;做
而read-r-u4ip;做
#用$port和$ip做一些事情
echo-n“$ip$端口:”
OUT=$(nmap-p“$port”--script=http-headers.nse“$ip”|
尾-n 13|
awk-F:“{print$2;exit}”)
[[$OUT==Apache]]&&echo-right | | echo-error
完成4<“$2”
完成3次<“$1”
您不需要在管道中使用head
:awk可以在阅读第一行后退出。谢谢……但有一个问题。我的结果是Apache,但输出脚本显示“错误”。以下命令在脚本编号为:nmap-p80--script=http-headers.nse www.test.com | tail-n13 | awk-F:'{print$2;exit}时有效“使用echo”>$out进行测试您所说的同样有效..非常感谢:)
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: ./nmap <port-range> <ip-list>"
exit 1
fi
OUT=`nmap -p $1 --script=http-headers.nse $2 | tail -n 13 | head -n 1 | awk -F: '{print$2}'`
while IFS= read -r LINE; do
grep "$LINE" $2
if [ $OUT == 'Apache' ]; then
echo right
else
echo wrong
fi
cat ports.txt
80
443
cat ip.txt
1.1.1.1
2.2.2.2
3.3.3.3
while read -r -u3 port; do
while read -r -u4 ip; do
# do stuff with $port and $ip
echo -n "$ip $port: "
OUT=$( nmap -p "$port" --script=http-headers.nse "$ip" |
tail -n 13 |
awk -F: '{print $2; exit}' )
[[ $OUT == Apache ]] && echo right || echo wrong
done 4< "$2"
done 3< "$1"