Linux expect介绍和用法

expect工具主要用于在linux上免交互实行程序。

1. 安装expect

# yum install expect -y

2. expect用法

expect常用选项

-c 从命令行执行expect脚本,默认expect是交互地执行的

expect常用命令

spawn           交互程序开始后面跟命令或者指定程序
expect          获取匹配信息匹配成功则执行expect后面的程序动作
send            用于发送指定的字符串信息
exp_continue    在expect中多次匹配就需要用到
send_user       用来打印输出 相当于shell中的echo
exit            退出expect脚本
eof expect      执行结束 退出
set             定义变量
puts            输出变量
set timeout     设置超时时间

3. expect脚本示例

1. ssh免交互跨主机执行命令

vim myssh.sh

#!/bin/bash

ip=192.168.6.215
user=root
password=123456
cmd="ifconfig"

function myssh(){
(
expect -c "
    spawn ssh $user@$ip $cmd
set timeout 60 expect { \"Are you sure you want to continue connecting (yes/no)?\" { send \"yes\n\" } \"*password:\" { send \"$password\n\" } } expect eof " ) } myssh

2. scp免交互跨主机拷贝文件

vim myscp.sh

#!/bin/bash

ip=192.168.6.215
user=root
password=123456
src_file=./date.txt
dest_path=/tmp/

function myscp(){
(
expect -c "
    spawn scp $src_file $user@$ip:$dest_path
set timeout 60 expect { \"Are you sure you want to continue connecting (yes/no)?\" { send \"yes\n\" } \"*password:\" { send \"$password\n\" } } expect eof " ) } date > ./date.txt myscp

3. ftp免交互上传或下载文件

vim myftp.sh

#!/bin/bash

ip=172.28.6.215
username=root
password=123456
src_file=./date.txt
dest_path=/tmp/

function myscp(){
(
expect -c "
    spawn ftp $ip
set timeout 60 expect \"Name\" send \"$username\n\" expect \"Password:\" send \"$password\n\" expect \"ftp>\" send \"bin\n\" expect \"ftp>\" send \"put date.txt\n\" expect \"ftp>\" send \"ls\n\" expect \"ftp>\" send \"bye\n\" expect eof " ) } date > ./date.txt myscp

  

posted @ 2021-01-15 17:06  郭小波  阅读(460)  评论(0)    收藏  举报