为每行运行脚本,并根据输出执行一些操作

时间:2018-11-20 20:09:04

标签: python linux bash

我有别人编写的Python脚本。在我的bash脚本中,我想针对txt文件中的每一行执行它,并使用每一行作为参数。然后根据python脚本的输出,将该行添加到新的txt文件中。

此刻我奔跑

sudo python tester.py 10.0.1.1 999 user pass

我的txt文件中的一行应为“ 10.0.1.1 999 user pass”。

如果成功,则显示“成功!”。这是我要将该行复制到新文件的地方。

现在,要使其变得更复杂,我想根据该行的开头更改python脚本。这不是100%必需的,但是可以省去我手工分割txt文件的麻烦。

例如如果该行以“ 10”开头,请使用脚本1。如果该行以“ 192”开头,请使用脚本2。两者都具有相同的“成功!”。输出。

我已经尝试过

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

有什么不对。

希望这对有人能够帮助我很有意义。

克里斯

2 个答案:

答案 0 :(得分:1)

通过引用$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

答案 1 :(得分:0)

将参数作为不同的元素传递。

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

这还将读取文件而无需启动无意义的cat,并记录您的输出。根据需要编辑详细信息。

您还可以在$ {line [0]}上使用case语句来确定要运行哪个程序。