概述

我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能。而expect就使用来实现这种功能的工具。

expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。expect需要Tcl编程语言的支持,要在系统上运行expect必须首先安装Tcl。

下面介绍一个通过expect来自动ssh连接的脚本,大家可以思考下里面实现的逻辑。


expect基础

在使用expect时,基本上都是和以下四个命令打交道:

linux怎么执行shell脚本(详解Linux中的expect用法--实现shell脚本自动交互)(1)


需求:自动连接

执行:/mnt/auto_connect.exp IP password 时 密码正确,则通过 ssh 连接到该 IP 主机,并保持登陆。


1.脚本内容:

# vim auto_connect.sh #!/bin/bash /usr/bin/expect << EOF //切换到expect环境 spawn ssh root@$1 //ssh连接IP expect { "yes/no" { send "yes\r";exp_continue } //确认连接 "password" { send "$2\r" } //输入密码 } Interact //保留 EOF //退出

linux怎么执行shell脚本(详解Linux中的expect用法--实现shell脚本自动交互)(2)


2.执行:

# chmod x auto_connect.sh //添加可执行权限 # sh auto_connect.sh 172.25.254.226 redhat //添加IP和密码 spawn ssh root@172.25.254.226 The authenticity of host '172.25.254.226 (172.25.254.226)' can't be established. ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.25.254.226' (ECDSA) to the list of known hosts.

linux怎么执行shell脚本(详解Linux中的expect用法--实现shell脚本自动交互)(3)


如果大家能够在工作中熟练的使用shell脚本就可以很大程度的提高工作效率,再搭配上expect,那么很多工作都可以自动化进行,对工作的展开如虎添翼。如果你会Python的话,你的视野将会更加开阔,那个时候你又会“嫌弃”expect了。

后面小编会分享更多Linux方面内容,感兴趣的朋友走一波关注哩~

linux怎么执行shell脚本(详解Linux中的expect用法--实现shell脚本自动交互)(4)

,