我正在尝试制作一个简单的 bash 脚本来计算 pcap 文件中捕获的数据包,我使用 tcpdump 获取每个 pcap 文件中的数据包并使用 bash 脚本添加它们,但它似乎不起作用。
#!/bin/bash
FILES=/share/capture/*.pcap
sum =0
for f in $FILES
do
output=$(sudo tcpdump -r $f 2> /dev/null |wc -l)
sum = $((output+ sum))
done
echo $sum
你能告诉我我做错了什么吗?
答案1
只需运行wc -l
所有文件的输出即可:
#!/bin/bash -
files=(/share/capture/*.pcap)
for f in "${files[@]}"; do
tcpdump -qr "$f" 2> /dev/null
done | wc -l
也可以看看:
capinfos -rTc "${files[@]}"
capinfos -rTc "${files[@]}" | cut -f2 | paste -sd + | bc
(假设文件名不包含 TAB 或 NL 字符)。
请注意您所做的:
FILES=/share/capture/*.pcap
您正在将字符串/share/capture/*.pcap
而不是文件列表分配给$FILES
。当$FILES
不加引号引用时,该全局模式会扩展(分割+全局操作员)。稍后,您也可以$f
不加引号,因此再次调用 split+glob 运算符。因此,如果$f
包含空白字符或其他通配符,它将再次扩展到其他文件。最好是在此处使用数组并确保引用所有变量。
答案2
#!/bin/bash
files=(/share/capture/*.pcap)
#echo $files
sum=0
for f in "${files[@]}"
do
output=`sudo tcpdump -r $f 2> /dev/null | wc -l`
sum=$((output + sum))
done
echo $sum