Tôi có một tập tin như sau:
6 192.168.0.4
13 192.168.0.2
2 192.168.0.9
Số đầu tiên là số lần IP bên phải đã cố đăng nhập vào máy của tôi (ssh) từ trong cùng một mạng. Mục tiêu là chặn IP đó bằng cách sử dụng bộ lọc mạng nếu nỗ lực lớn hơn 3. Ở đây, 2 trong số các mục phù hợp với tiêu chí. Lưu ý: Có thể có nhiều hơn 3 mục.
Tôi không thể tìm ra cách sắp xếp từng dòng tệp này (Tôi RẤT mới với BASH). Đây là những gì tôi đã cố gắng:
#!/bin/bash
file="/home/foo/documents/iptxt"
while IFS='' read line || [[ -n "$line" ]]; do
char1=`awk '{ print $1 }' $file`
char2=`awk '{ print $2 }' $file`
if $char1 -gt 3
then
echo "$char2 has tried to login $char1 times
fi
done <$file
Điều này đưa ra lỗi "không tìm thấy lệnh" chỉ đến dòng thứ 5 (câu lệnh if). Không có gì lạ, bởi vì tôi đã lặp lại $ char1_atteem và nó mang lại:
6 13 2
6 13 2
6 13 2
Hiện tại, J chỉ muốn nó in ra các dòng như:
192.168.0.4 has tried to login 6 times
192.168.0.2 has tried to login 13 times
192.168.0.1 has tried to login 2 times
Xin vui lòng giúp đỡ!
if $char1 -gt 3
bằngif [ "$char1" -gt 3 ]
. Nói chung, bất cứ khi nào bạn gặp lỗi cú pháp shell, bước đầu tiên tốt là cắt và dán mã của bạn vào shellcheck.net và sửa lỗi (quan trọng) và cảnh báo (có thể quan trọng) mà nó xác định. Nếu bạn gặp khó khăn trong việc hiểu các thông điệp của nó, thì hãy đến đây và hỏi.