在使用quagga的过程中,实际有很多非交互式的场景,比如想批量做路由撤销的操作。从一个系统管理员的角度上看,希望对软路由的控制像直接在linux里写脚本一样简单方便。之前在vtysh里行执行路由撤销命令我是用expect实现的
/usr/bin/expect -c "
set timeout 2
spawn $vtysh
expect "*#*" { send "conf t \r" }
expect "*(config)#*" { send "router ospf \r" }
expect "*(config-router)#*" { send "no network $network area $area \r" }
expect "*(config-router)#*" { send "exit \r" }
expect "*(config)#*" { send "exit \r" }
expect "*#*" { send "write memory \r" }
expect "*#*" { send "exit\r" }
"
set timeout 2
spawn $vtysh
expect "*#*" { send "conf t \r" }
expect "*(config)#*" { send "router ospf \r" }
expect "*(config-router)#*" { send "no network $network area $area \r" }
expect "*(config-router)#*" { send "exit \r" }
expect "*(config)#*" { send "exit \r" }
expect "*#*" { send "write memory \r" }
expect "*#*" { send "exit\r" }
"
实际有更简单的方式
sudo vtysh -c "configure terminal" -c "router ospf" -c "network $network area $area " -c "exit" -c "exit" -c "write file"
这样可以简单对expect的依赖,脚本编写也更简洁。