tcl脚本实现登录终端并批量执行命令

需求

大致需求是登录一个新的命令行,然后批量执行命令,但ip不同。本来打算用python写的,但是登录新的命令行需要安装pexpect包,由于需要在设备上跑,所以采用expect命令来实现登录功能,但是使用shell脚本配合expect命令登录传参特别不方便。每次下发命令需要重复登录,很麻烦,查资料得知expect脚本是采用的tcl脚本语言编写,因此我们采用tcl来写这个脚本

实现

#!/usr/bin/expect
#起始ip地址
set start_ip [lindex $argv 0]
#运行次数
set run_time[lindex $argv 1]


#数字转ip
proc num2ip {num} {
	set a [expr $num>>24&0xff;]
	set b [expr $num>>16&0xff;]
	set c [expr $num>>8&0xff;]
	set d [expr $num&0xff;]
	return $a.$b.$c.$d
}

#ip转数字
proc ip2num(ip) {
	set num 0
	set tmp_obj [lreverse [split $ip .] ]
	for {set i 0} {$i < 4} {incr i} {
		set num [expr {256 ** $i * [lindex $tmp_obj $i]} + $num]	
	}
	return $num
}

#通过传递的起始ip地址计算出对应的num
set start_num [ip2num $start_ip]
#计算循环的边界
set end_num [expr $run_time + $start_num]

#登录程序
spawn /usr/bin/login root

#输入密码,这块的Password需要根据弹出的东西来填写
expect {
	"Password:" {send "root\n"}
}

for {set i $start_num} {$i  < $end_num} {incr i} {
	set ip [num2ip $i]
	
	#这里只是举个例子,命令自己组织
	set cmd "route add $ip\n"
  
    #跟输入密码处同理,需要根据自己环境来配置
	expect {
		"#" {send $cmd}
	}
}

运行

chmod 777 demo.sh
./demo.sh 1.1.1.1 1000

总结

第一次写tcl脚本,网上资料很少,有很多坑,比如{的左边要有空格,}的右边要有空格,希望有需要的同学可以开箱即食。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值