สิ่งที่ฉันต้องการ
ฉันมีสคริปต์ที่ดึงข้อมูลพอร์ตสำหรับโดเมนและจัดเก็บไว้ในไฟล์ข้อความที่เรียกว่า portscan.txt
. ตัวอย่าง:
portscan.txt
ไฟล์:
somedomain.com:80
somedomain.com:443
ฉันต้องการลบข้อมูลเมื่อตรงตามเงื่อนไขบางประการเท่านั้น เงื่อนไขเหล่านี้รวมถึง:
- ไฟล์ที่มีโดเมนควรมี 2 บรรทัดหรือน้อยกว่า
- พอร์ตควรเป็น 80 หรือ 443 เท่านั้น (เช่น ฉันไม่ต้องการลบไฟล์หากมีพอร์ต 8080, 8443 หรือพอร์ตอื่นๆ อยู่ในไฟล์)
บันทึก: โดยพื้นฐานแล้ว ไฟล์ตัวอย่างที่ให้ไว้ข้างต้น ควร ถูกลบ แต่ฉันไม่ต้องการลบไฟล์หากมี 2 บรรทัด แต่พอร์ตเป็น 8080 หรือ 8443 (หรือพอร์ตอื่นสำหรับเรื่องนั้น)
ตัวอย่างดังนี้:
somedomain.com:8443
somedomain.com:443
สิ่งนี้ควร ไม่ ถูกลบ
สิ่งที่ฉันพยายาม
ฉันพยายามเขียนสคริปต์และนี่คือสิ่งที่ฉันมี:
#!/bin/bash
เส้น = $ (แมว portscan.txt | wc -l)
ports=$(cat portscan.txt | grep -Pv '(^|[^0-9])(80|443)($|[^0-9])')
ถ้า [[ $lines < 3 ]] && [[ $ports != 80 ]]; แล้ว
ถ้า [[ $พอร์ต != 443 ]]; แล้ว
echo "ฉันต้องการลบสิ่งนี้"
ไฟ
อื่น
echo "ฉันจะไม่ลบสิ่งนี้..."
ไฟ
นี่เป็นการเรนเดอร์สคริปต์ครั้งที่สอง ฉันพยายามซ้อน ถ้า เนื่องจากฉันไม่สามารถทำเงื่อนไขเช่นนี้:
ถ้า portscan.txt น้อยกว่าสองบรรทัด และ พอร์ตต่างๆ ไม่ 80 หรือ 443
ฉันยังพยายามทำสิ่งนี้ด้วยวิธีที่ง่ายกว่ามาก เช่น:
#!/bin/bash
เส้น = $ (แมว portscan.txt | wc -l)
ports=$(cat portscan.txt | grep -Pv '(^|[^0-9])(80|443)($|[^0-9])')
ถ้า [[ $lines < 3 ]] && (( $ports != 80||443 )); แล้ว
echo "ฉันต้องการลบสิ่งนี้"
อื่น
echo "ฉันจะไม่ลบสิ่งนี้..."
ไฟ
ฉันได้ลอง ((
เพราะฉันอ่านว่ามันจะดีกว่าที่จะใช้กับฟังก์ชันเลขคณิต -- ซึ่งเป็นสิ่งที่ฉันคิดว่าฉันต้องการ แต่ฉันไม่เข้าใจ bash กับอาร์กิวเมนต์แบบมีเงื่อนไขเมื่อมันควรจะเป็นดังนี้: "สิ่งนี้ และ นั่น หรือ นั่น".
หวังว่านี่สมเหตุสมผล ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก!