- send – 发送字符串到进程
- expect – 等待来自进程的特定的字符串
- spawn – 启动命令
1. Expect “Hello World”范例
下面的expect脚本等待具体字符串“hello”。 当它找到它时(在用户输入后),“world”字符串将作为应答发送。
#!/usr/bin/expect
expect "hello"
send "world"
下面的expect脚本等待具体字符串“hello”。 当它找到它时(在用户输入后),“world”字符串将作为应答发送。
#!/usr/bin/expect
expect "hello"
send "world"
2.读取txt
#!/bin/bash
for i in `awk '{print $1}' passwd.txt`
do
i=`awk -v I="$i" '{if(I==$1)print $1}' passwd.txt`
j=`awk -v I="$i" '{if(I==$1)print $2}' passwd.txt`
k=`awk -v I="$i" '{if(I==$1)print $3}' passwd.txt`
echo "${i}"
echo "${j}"
echo "${k}"
for i in `awk '{print $1}' passwd.txt`
do
i=`awk -v I="$i" '{if(I==$1)print $1}' passwd.txt`
j=`awk -v I="$i" '{if(I==$1)print $2}' passwd.txt`
k=`awk -v I="$i" '{if(I==$1)print $3}' passwd.txt`
echo "${i}"
echo "${j}"
echo "${k}"
#expect login.exp $i $j $k
done
done
3.登陆脚本
#!/usr/bin/expect -f
set ipaddress [lindex $argv 0]
set username [lindex $argv 1]
set passwd [lindex $argv 2]
if { $argc != 3 } {
puts stderr $passwd
puts stderr $username
exit 1
}
set timeout 30
#使用spawn命令来激活ssh程序,模拟终端的输出将能够被expect所读取,模拟终端也能从send输入到远程主机
spawn ssh $username@$ipaddress
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$passwd\r" }
}
expect "*Last login*" interact
set ipaddress [lindex $argv 0]
set username [lindex $argv 1]
set passwd [lindex $argv 2]
if { $argc != 3 } {
puts stderr $passwd
puts stderr $username
exit 1
}
set timeout 30
#使用spawn命令来激活ssh程序,模拟终端的输出将能够被expect所读取,模拟终端也能从send输入到远程主机
spawn ssh $username@$ipaddress
expect {
"yes/no" { send "yes\r";exp_continue }
"password:" { send "$passwd\r" }
}
expect "*Last login*" interact
4.
从本地192.168.1.10拷贝文件到远程服务器192.168.1.8
scp /root/install.log root@192.168.1.8:/usr/local/src
可以用通配符拷贝
scp /root/install.* root@192.168.1.8:/usr/local/src
远程到本地
scp root@192.168.1.12:/usr/local/src/*.log /root/
scp root@192.168.1.11:/usr/local/src/*.log /root/
5.后台运行脚本
nohup ./scan.sh > append.txt &