在linux下如何通过expect正确执行自动切换登录,并且执行命令和脚本

最近项目在搞可维护性这块功能,如:修改网卡IP、机器重启/关闭,数据库备份与恢复;这些功能点与linux中的shell脚本执行息息相关,但shell脚本却不支持自动化,目前我所知道的支持自动化的脚本也就expect、perl、python可支持自动化处理的脚本,虽然linux安装安后会自带perl命令库,但还是需要通过安装expect第三方动态语言。好了,废话不多说,直接上代码:
#! /usr/bin/expect 

set command [lindex $argv 0]

set username [lindex $argv 1] 

set passwd [lindex $argv 2]

spawn su - $username -c $command

expect "password:"

send $passwd\r

expect eof

exit

#! /usr/bin/expect   如果各位不知道这句是什么意思,可以通过执行witch epxect命令查询expect命令库地址,我这里就是/usr/bin/expect

脚本中首先定义了command、username、passwd三个参数,在调用时可通过./shell.sh  reboot  root  root 来进行传参,切记不可用sh shell.sh的方式来执行脚本,因为expect脚本本身是不能用shell的形式来启动的,不然会报spawn、expect、send命令不到的错误。

如果是想切换用户后调用脚本,可以这样写:

 #! /usr/bin/expect 

set username [lindex $argv 0] 

set passwd [lindex $argv 1]

spawn su - $username

expect "password:"

send $passwd\r

expext {

"su:密码错误" { send "echo 密码错误\r" }

"*#*"  {  send "sh test.sh\r" }

}

expect eof

exit

 

expect安装包在我的资源中有,大家如有需要也可以下载,语言的思想基本都差不多,只是脚本语言的写法都比较严谨,所以在编写过程中需要大伙细心。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值