Страница 1 из 1

Вывести цифры из строки результата

Добавлено: 11 май 2020, 15:55
madesta
Имеется задание task.sh, состоящее из нескольких последовательно запускаемых task1.sh, task2.sh ...
После каждого задания задаётся вопрос: продолжать или снять выполнение задания:
task1.png
task1.png (6.56 КБ) 652 просмотра
Листинг задачи ask.sh (задаётся вопрос):
#!/bin/bash
zenity --question --timeout=5 --title="Confirm" --text="Отменить задачу?"
answer=$?
if [ "$answer" -eq 0 ]; then
echo '1' > /home/minter/Tools/result.txt
elif [ "$answer" -eq 1 ]; then
echo '0' > /home/minter/Tools/result.txt
elif [ "$answer" -eq 5 ]; then
echo '0' > /home/minter/Tools/result.txt
fi
exit 0

Если введено No, то записывается 0, если Yes - 1. По умолчанию после 5 секундного ожидания записывается значение 0.

В задании test.sh имеется инструкция "если, то". Считывается значение выбора пользователя. Если оно равно 0, то ничего не делается (задание test.sh продолжается далее). Если считанное значение выбора пользователя 1, то должна выдаваться команда на прекращение процесса test.sh по его pid

Листинг:
#!/bin/bash
/home/minter/Tools/task1.sh
sleep 5
/home/minter/Tools/ask.sh
var=`cat /home/minter/Tools/result.txt`
if [ $var -eq 0 ];
then
:
else
kill -TERM pid_test.sh
fi
/home/minter/Tools/task2.sh
...

По запросу находятся 2 pid процесса test.sh

ps ax | grep -v grep | grep test.sh > /home/minter/Tools/test1.txt
task2.png
Чтобы отменить оба процесса достаточно завершить процесс test.sh с бОльшим значение pid
15166 ? S 0:00 /bin/sh -c sh '/home/minter/Tools/test.sh'
15167 ? S 0:00 sh /home/minter/Tools/test.sh

А бывает, что pid имеет значение до 10000

2164 ? S 0:00 /bin/sh -c sh '/home/minter/Tools/test.sh'
2165 ? S 0:00 sh /home/minter/Tools/test.sh

Поэтому из результата беру вторую строку и записываю в новый файл:

sed -n -e 2p /home/minter/Tools/test1.txt > /home/minter/Tools/test2.txt

И здесь затык. Необходимо выбрать из строки только цифры, которые и будут являться необходимым номером pid, чтобы записать их в переменную $varpid и дать команду kill -TERM $varpid Может быть кто подскажет решение, если это значение может быть и 5-значным, и 4-значным, например:
15167 ? S 0:00 sh /home/minter/Tools/test.sh

или

2165 ? S 0:00 sh /home/minter/Tools/test.sh

Вывести цифры из строки результата

Добавлено: 11 май 2020, 16:01
rogoznik
madesta, как то так

Код: Выделить всё

echo 2165 ? S 0:00 sh /home/minter/Tools/test.sh | awk '{print $1}'
на выходе получишь 2165

Вывести цифры из строки результата

Добавлено: 11 май 2020, 16:11
madesta
Примечание. Только пришлось сначала прочитать строку:

var=`cat /home/minter/Tools/test2.txt`
echo $var | awk '{print $1}' > /home/minter/Tools/test3.txt