1、使用I/O重定向的方式将命令列表提供给交互式程序
2、标准输入的一种替代品
3、语法格式
命令 <<标记符 …… …… 标记符
注意事项:
1、标记可以使用任意合法字符
2、结尾的标语一定要顶格写,前面不能有任何字符
3、结尾的标记后面也不能有任何字符(包括空格)
4、开头标记前后的空格会被省略
修改变量 [root@localhost ~]# read a 10 [root@localhost ~]# echo $a 10 [root@localhost ~]# read a <<EOF > 220 > EOF [root@localhost ~]# echo $a 220 变量替换 [root@localhost ~]# a=$(cat<<EOF > 20 > $a > EOF > ) [root@localhost ~]# echo $a 20 220 关闭变量替换 [root@localhost ~]# a=$(cat<<'EOF' > 30 > $a > EOF > ) [root@localhost ~]# echo $a 30 $a
1、Expect是建立在tcl基础上的一个工具,Expect是用来进行自动化控制和测试的工具。主要解决shell脚本中交互相关的问题。
2、expect是免交互的软件,需要安装。软件名expect。
基本命令 expect 1、判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回 2、只能捕捉由spawn启动的进程的输出 3、用于接收命令执行后的输出,然后和期望的字符串匹配 send 1、向进程发送字符串,用于模拟用户的输入 2、该命令不能自动回车换行,一般要加\r (回车),\n(换行) spawn 启动进程,并跟踪后续交互信息 结束符 1、expect eof:等待执行结束(用于执行自动化任务) 2、interact:执行完成后保持交互状态,把控制权交给控制台 set 1、设置超时时间,过期则继续执行后续指令 2、单位是秒 3、timeout -1表示永不超时 4、默认情况下,timeout是10秒 例:set timeout 20 #登录时超过到少秒退出 exp_ continue 允许expect继续向下执行指令 send_user 回显命令,相当于echo 开启日志文件 log_file test.log #日志记录操作 显示信息 log_user 1 #1为屏幕输出信息,0为不输出信息 接收参数 1、Expect脚本可以接受从bash传递的参数 2、可以使用[lindex $argv n]获得 3、n从0开始,分别表示第一个,第二个,第三个...参数
#!/usr/bin/expect set timeout 10 1og_file ex.1og 1og_user 1 set user [lindex $argv 0] set ip [lindex $argv 1] set pass [lindex $argv 2] spawn ssh $user@$ip expect { “passwd:” { send "$pass\r"; } } #interact expect "#" send "ls\r" send "ifconfig ens33\r" send "exit\r" expect eof
#!/bin/bash expect -C “ spawn ssh root@192. 168.238.150 expect \"password:\" { send \"123456\r\" } expect \"]#\" { send \"1s\r\" } expect \"]#\" { send \"ifconfig ens33\r\" } expect \"]#\" { send \"exit\r\" } expect eof ”