У меня есть существующий сценарий, который извлекает информацию о портах для доменов и сохраняет ее в текстовый файл с именем portscan.txt
. Пример:
portscan.txt
файл:
somedomain.com:80
somedomain.com:443
Я хочу удалить информацию только при соблюдении определенных условий. Эти условия включают в себя:
Примечание: Таким образом, пример файла, приведенного выше , следует удалить , но я не хочу удалять файл, если есть 2 строки, но порты 8080 или 8443 (или любой другой порт в этом отношении) Пример примерно такой:
somedomain.com:8443
somedomain.com:443
Это не должно быть удалено , а не .
Я попытался написать сценарий, и вот что у меня получилось:
#!/bin/bash
lines=$(cat portscan.txt | wc -l)
ports=$(cat portscan.txt | grep -Pv '(^|[^0-9])(80|443)($|[^0-9])')
if [[ $lines < 3 ]] && [[ $ports != 80 ]]; then
if [[ $ports != 443 ]]; then
echo "I need to delete this"
fi
else
echo "I will NOT delete this..."
fi
Это вторая визуализация сценария, я попытался вложить if операторы, потому что я не смог условие вроде этого:
ЕСЛИ сканирование портов.txt меньше двух строк И порты НЕ 80 ИЛИ 443
Я также попытался сделать это гораздо проще, например:
#!/bin/bash
lines=$(cat portscan.txt | wc -l)
ports=$(cat portscan.txt | grep -Pv '(^|[^0-9])(80|443)($|[^0-9])')
if [[ $lines < 3 ]] && (( $ports != 80||443 )); then
echo "I need to delete this"
else
echo "I will NOT delete this..."
fi
Я пробовал ((
, потому что я читал, что это лучше использовать с арифметическими функциями - это то, что, как я думал, мне нужно, но я не так разбираюсь в bash с условными аргументами, когда это должно быть например: «Это и то или то».
Надеюсь, это имеет смысл, любая помощь будет принята с благодарностью!