目录
使用I/O重定向的方式将命令列表提供给交互式程序或命令,比如ftp、cat或read命令等。
是标准输入的一种替代品可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地生产出一个"文件"并用作"命令"的标准输入。Here Document 也可以与非交互式程序和命令一起使用 。
- 语法格式:
- 命令 <<标记
- ...
- 内容 #标记直接是传入内容
- ...
- 标记
注意事项:
标记可以使用任意合法字符(通常为EOF)
结尾的标记一定要顶格写,前面不能有任何字符
结尾的标记后而也不能有任何字符(包括空格)
开头标记前后的空格会被省略掉
直接将内容写入通过命令行输出

将输入保存到文件

创建本地源

通过read命令接收输入并打印,输入值是两个EOF标机之间的部分,作为变量a的值

通过passwd命令给用户设置密码

建立在tcl语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互相关的问题。
- rpm -q expect
- rpm -q tcl
- yum install -y expect
expect直接执行,需要使用expect命令去执行脚本
- #!/usr/bin/expect
- #设置超时时间
- set timeout 5
- #参数传入
- set hostname [lindex $argv 0]
- set password [lindex $argv 1]
- #开始追踪命令
- spawn ssh $hostname
- #免交互执行,捕捉信息并匹配
- expect {
- "NO route to host" exit
- "Connection refused" exit
- "(yes/no)" {send "yes\r";exp_continue}
- "*password:" {send "password\r"}
- }
- #把控制权交给控制台
- interact
-
- exit
免交互切换用户
- #!/usr/bin/expect
- #设置超时时间
- set timeout 5
- #参数传入
- set username [lindex $argv 0]
- set password [lindex $argv 1]
- #开始追踪命令
- spawn su $username
- #免交互执行,捕捉信息并匹配
- expect "密码"
- send "$password\r"
- expect "*]#"
- send_user "ok"
- #把控制权交给控制台
- interact
- #expect eof
免交互远程登录
- #!/usr/bin/expect
- #开启ssh命令,ssh后边要跟IP地址
- spawn ssh root@192.168.223.10 #开启一个程序,这个程序是ssh远程>登录
- expect { #捕获内容,当出现password时,机会向程序发送密码
- "password:" {send "123456\r":exp_continue }
- "(yes/no)" { send "yes\r"}
- }
- #expect eof
- interact #交互,否则会直接退出远程服务器
- #串行执行
- 一个expect匹配
- 一个send发送
- expect
- send
- 如此依次执行
-
- #并行执行
- expect {
- 匹配一个 {send 发送一个字符串;exp_continue}
- 另一个匹配 {send 发送}
- }
- 如果能匹配前一个就先完成前一个免交互过程,如果前面的没有匹配上就直接匹配后面的完成免交互