• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Скрипт для запуска другого скрипта

1984

Green Team
08.03.2018
137
490
BIT
1
Знающие люди, подскажите пожалуйста, насколько реально и как реализовать скрипт, который:

1. запускает другой скрипт (допустим Nmap),
2. по завершении работы скрипта (Nmap) копирует и сохраняет в файл /root/Desktop/1 результаты работы скрипта (например последние 50 строк),
3. снова запускает скрипт...
4. по завершении работы скрипта (Nmap) копирует и сохраняет в файл /root/Desktop/2 результаты работы скрипта...
...
и так по зацикливанию до бесконечности.

Понимаю, что это реально, но не знаю как реализовать, так как пока далёк от программирования.
 
Пожалуй один из миллионов способов реализовать это

Код:
#!/bin/bash

file=$1
while IFS= read line
do
    nmap -p 22 -oN ~/Desktop/$line.log $line
done <"$file"

Запускаешь ./script.sh targets.txt , где targets.txt файл с айпишниками в формате

127.0.0.1
127.0.0.2
127.0.0.3
... и тд
 
Последнее редактирование:
Хух, спасибо, сейчас попробую) А я уже так заморочился, написал скрипт /bin/run.sh:
Код:
#!/bin/bash
        ret=$(ps aux | grep nmap | wc -l)
        if [ "$ret" -eq 1 ]
then {
        echo "nmap"
        sleep 1
        run nmap
}
else
{
        echo "/bin/run.sh"
        sleep 1
        /bin/run.sh
}
fi;
Правда скрипт не зацикливается, ну и вывод текстовых файлов не написал
 
Честно сказать, идею твоего run.sh я не понял) Но заметил один интересный момент:
ps aux | grep nmap | wc -l
Будет возвращать 1 даже если процесс nmap не запущен, потому что оно считает саму комманду grep nmap. Если когда то понадобится проверить существует ли какой то процесс, лучше исключать сам греп:
ps aux | grep nmap | grep -v grep | wc -l
 
ret=$(ps aux | grep nmap | wc -l)
Можно исключить сам grep, иначе он посчитает себя и выведет как минимум одну строку
ps aux | grep nmap | grep -v grep | wc -l

Можно вообще засунуть это выражение в if
if [ `ps aux | grep nmap | grep -v grep | wc -l` -eq 1 ] ; then echo 1; else echo 2; fi

По поводу цикла вариантов масса:
1. Можно сделать бесконечный цикл while true; do echo 123; sleep 2s; done
2. Можно в цикле работать с переменной x=5; while [ $x -gt 0 ]; do echo $x; sleep 1s; x=$((x-1)); done
пока х больше 0, показывай х, и вычитай из него 1.
3. Можно работать в цикле, пока читается файл до конца
while read line; do echo $line; sleep 1s; done < file.txt
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!