Запустите скрипт для каждой строки и сделайте что-нибудь на основе вывода - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть скрипт на Python, который кто-то сделал.Внутри моего bash-скрипта я хотел бы выполнить его для каждой строки в текстовом файле, используя каждую строку в качестве аргумента.Затем, основываясь на выводе скрипта python, добавьте эту строку в новый текстовый файл.

В данный момент я запускаю

sudo python tester.py 10.0.1.1 999 user pass

Где будет "10.0.1.1 999 user pass"строка в моем текстовом файле.

Если это удастся, выплевывает «УСПЕХ!».Вот где я хотел бы скопировать эту строку в новый файл.

Теперь, чтобы сделать его более сложным, я хотел бы изменить скрипт python, основанный на начале строки.Это не на 100% необходимо, но избавляет меня от необходимости разбивать текстовый файл перед раздачей.Если строка начинается с «10», используйте скрипт 1. Если он начинается с «192», используйте скрипт 2. Оба имеют одинаковый «УСПЕХ!»вывод.

Я пробовал это

cat list.txt | while read line
do
    python tester.py $line
    if $(...) == "S"*
    then
        $line >> good.txt
    fi
    done

Что-то не так, хотя.

Надеюсь, это было достаточно для кого-то, чтобы иметь возможность помочь мне.

Chris

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Передайте аргументы как отдельные элементы.

while read -a line
do python tester.py "${line[@]}"
done < list.txt > log.txt 2>&1

Это также будет считывать файл без запуска бессмысленно cat и записывать ваш вывод.При необходимости измените детали.

Вы также можете использовать оператор case в $ {line [0]}, чтобы определить, какую программу запустить.

0 голосов
/ 20 ноября 2018

Кавычкой $line вы объединяете все слова в строке в один аргумент, но скрипту Python требуется 4 отдельных аргумента.

Вы должны прочитать первое поле строки в переменнуюсам по себе, так что вы можете проверить его, чтобы решить, какой скрипт запускать.

Затем присвойте вывод сценария переменной, протестируйте его с SUCESS! и запишите в выходной файл, если он совпадает.

while read -r ip rest
do
    case "$ip" in
        10.*) script=tester.py ;;
        192.*) script=tester2.py ;;
        *) echo "IP $ip doesn't start with 10 or 192";
            exit;;
    esac
    result=$(sudo python $script $ip $rest)
    if [[ $result == SUCCESS* ]]
    then
        echo "$ip $rest"
    fi
done < list.txt > good.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...