Tôi cân gi
Tôi có một tập lệnh hiện có để lấy thông tin cổng cho các miền và lưu trữ nó vào một tệp văn bản có tên portcan.txt
. Ví dụ:
portcan.txt
tập tin:
somedomain.com:80
somedomain.com:443
Tôi chỉ muốn xóa thông tin nếu một số điều kiện được đáp ứng. Những điều kiện này bao gồm:
- Tệp có tên miền phải có 2 dòng trở xuống
- Các cổng chỉ nên là 80 hoặc 443 (nghĩa là tôi không muốn xóa tệp nếu 8080, 8443 hoặc bất kỳ cổng nào khác tồn tại trong tệp).
Ghi chú: Về cơ bản, tệp ví dụ được cung cấp ở trên Nên bị xóa, nhưng tôi không muốn xóa tệp nếu có 2 dòng, nhưng các cổng là 8080 hoặc 8443 (hoặc bất kỳ cổng nào khác cho vấn đề đó)
Ví dụ như vậy:
somedomain.com:8443
somedomain.com:443
Cái này nên không phải bị xóa.
Những gì tôi đã cố gắng
Tôi đã thử viết kịch bản này ra và đây là những gì tôi có:
#!/bin/bash
lines=$(cat portcan.txt | wc -l)
cổng=$(cat portcan.txt | grep -Pv '(^|[^0-9])(80|443)($|[^0-9])')
if [[ $lines < 3 ]] && [[ $ports != 80 ]]; sau đó
nếu [[ $port != 443 ]]; sau đó
echo "Tôi cần xóa cái này"
fi
khác
echo "Tôi sẽ KHÔNG xóa cái này..."
fi
Đây là lần hiển thị thứ hai của tập lệnh, tôi đã thử lồng vào nhau nếu tuyên bố vì tôi không thể thực hiện một điều kiện như thế này:
NẾU portcan.txt nhỏ hơn hai dòng VÀ các cổng là KHÔNG PHẢI 80 HOẶC 443
Tôi cũng đã thử điều này theo cách đơn giản hơn nhiều như sau:
#!/bin/bash
lines=$(cat portcan.txt | wc -l)
cổng=$(cat portcan.txt | grep -Pv '(^|[^0-9])(80|443)($|[^0-9])')
if [[ $lines < 3 ]] && (( $ports != 80||443 )); sau đó
echo "Tôi cần xóa cái này"
khác
echo "Tôi sẽ KHÔNG xóa cái này..."
fi
tôi đã thử ((
bởi vì tôi đọc được rằng điều này tốt hơn nên được sử dụng với các hàm số học -- đó là điều tôi nghĩ là tôi cần, nhưng tôi không rành lắm với các đối số điều kiện khi nó phải như sau: "Cái này và điều đó hoặc điều đó".
Hy vọng rằng điều này có ý nghĩa, bất kỳ trợ giúp sẽ được đánh giá rất cao!