Ceea ce am nevoie
Am un script existent care extrage informații despre porturi pentru domenii și le stochează într-un fișier text numit portscan.txt
. Exemplu:
portscan.txt
fişier:
somedomain.com:80
somedomain.com:443
Doresc să șterg informațiile numai dacă sunt îndeplinite anumite condiții. Aceste condiții includ:
- Fișierul cu domeniile ar trebui să aibă 2 sau mai puține linii
- Porturile ar trebui să fie doar 80 sau 443 (adică, nu vreau să șterg fișierul dacă 8080, 8443 sau orice alt port există în fișier).
Notă: Deci, practic, fișierul exemplu furnizat mai sus ar trebui să să fie șters, dar nu vreau să șterg fișierul dacă există 2 linii, dar porturile sunt 8080 sau 8443 (sau orice alt port de altfel)
Exemplu de genul:
somedomain.com:8443
somedomain.com:443
Asta ar trebui nu fi sters.
Ce am încercat
Am încercat să scriu asta și iată ce am:
#!/bin/bash
linii=$(cat portscan.txt | wc -l)
porturi=$(cat portscan.txt | grep -Pv '(^|[^0-9])(80|443)($|[^0-9])')
dacă [[ $linii < 3 ]] && [[ $porturi != 80 ]]; atunci
dacă [[ $porturi != 443 ]]; atunci
echo „Trebuie să șterg asta”
fi
altfel
echo "NU voi șterge asta..."
fi
Aceasta este a doua redare a scriptului, am încercat imbricat dacă declarații pentru că nu am putut face o condiție ca aceasta:
DACĂ portscan.txt are mai puțin de două linii ȘI porturile sunt NU 80 SAU 443
De asemenea, am încercat acest lucru într-un mod mult mai simplu, astfel:
#!/bin/bash
linii=$(cat portscan.txt | wc -l)
porturi=$(cat portscan.txt | grep -Pv '(^|[^0-9])(80|443)($|[^0-9])')
dacă [[ $linii < 3 ]] && (( $porturi != 80||443 )); atunci
echo „Trebuie să șterg asta”
altfel
echo "NU voi șterge asta..."
fi
Am încercat ((
pentru că am citit că acest lucru este mai bine să fie folosit cu funcții aritmetice - care este ceea ce credeam că am nevoie, dar nu sunt la fel de priceput cu argumente condiționate atunci când ar trebui să fie de genul: „Acesta și acea sau acea".
Sperăm că acest lucru are sens, orice ajutor ar fi foarte apreciat!