我有别人编写的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
有什么不对。
希望这对有人能够帮助我很有意义。
克里斯
答案 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语句来确定要运行哪个程序。