Linux网络——shell编程之shell编程之免交互
一、概述
使用I/O重定向的方式将命令列表提供给交互式程序,是标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地 生产出一个文件并用作命令的标准输入,Here Document 可以与非交互式程序和命令一起使用
1.常用的交互程序:
read,ftp,passwd,su,sudo,fdisk等等
2.语法格式:
命令 <<标记
... #标记之间是传入内容
...
标记
注:
1.标记可以使用任意合法字符,但开始标记与结尾标记需要保持一致。(常用标记EOF,使用其他字母也可以)
2.结尾的标记一定要顶格写,前面不能有任何字符。
3.结尾的标记后面也不能有任何字符(包括空行)。
4.开头标记前后的空格会被省略掉。
二、Here Document常规用法
1.read 命令的读取
read a <<EOF
>hello world
>EOF
2.wc -l 的内容行数统计
3.passwd用户密码的修改
passwd <<EOF
>密码
>密码
>EOF
4.cat 查看内容并输出到文件中
5.cat 查看交互内容并输出到新的文件中
6.交互内容中输出变量
三、Expect实现免交互运用
Expect 工具是一款使用 Tcl 语言编写的自动交互式应用程序工具,它可以模拟用户与交互式程序(如 Telnet、SSH、FTP、scp 等)之间的交互过程,从而可以实现自动化的测试、配置和管理等操作。Expect 工具可以根据预定的脚本,自动完成一系列的操作,减少人工干预,提高工作效率。
1.Expect 工具的主要特点
①.可以与任何交互式程序进行交互,包括 Telnet、SSH、FTP、scp 等;
②.支持自动化的测试、配置和管理等操作;
③.支持交互式操作,包括键盘输入、命令执行、输出读取等;
④.可以使用 Tcl 语言编写脚本,灵活性和可扩展性强;
⑤.支持多种平台,包括 Linux、Unix、Windows 等。
2.Expect 工具的安装
安装下载expect工具
yum install -y expect
检查expect安装包:
rpm -q expect
检查依赖包tcl:
rpm -q tcl
三、Expect免交互的脚本运用
1.示例一:免交互预设值修改用户密码
#!/usr/bin/expect ##引入expect工具
set timeout 5 ## 设置超时时间为5秒,默认情况下是 10 秒
spawn passwd ztm ## spawn追踪后面指令产生的交互过程
expect "新的 密码" ## 匹配交互过程中的提示信息,这里要完全一致,否则会匹配不到
send "123456\r" ## 相当于 echo,传送在该交互中的预设值
expect "重新输入新的 密码"
send "123456\r"
expect eof ## 结束符
2.示例二:通过位置变量传入获取值,修改用户密码
#!/usr/bin/expect
set username [lindex $argv 0]
set password [lindex $argv 1]
spawn passwd $username
expect "新的 密码"
send "$password\n"
expect "重新输入新的 密码"
send "$password\n"
expect eof