免交互Here Document和EXPECT

免交互Here Document和EXPECT


在这里插入图片描述

Here Document

Shell中通常将EOF与 << 结合使用,表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主调Shell。可以把EOF替换成其他东西,意思是把内容当作标准输入传给程序,当shell看到< <的时候,它就会知道下一个词是一个分界符。在该分界符以后的内容都被当作输入,直到shell又看到该分界符(位于单独的一行)。这个分界符可以是你所定义的任何字符串。

使用Cat和EOF多行输入

cat >> /root/test.txt <<EOF 
hello
hello word
world
EOF

示例:

#EOF写本地yum源(镜像挂载mnt下)

[root@localhost ~]# cat > wpc.repo <<EOF
>[wpc]
>name=wpc
>baseurl=file:///mnt
>enabled=1
>gpgcheck=0
>EOF
#给wpc用户修改密码

[root@localhost ~]# passwd wpc <<EOF
>971125
>971125
>EOF

Expect

建立在tcl语言基础上的一个工具,常被用于进行自动化控制和测试,解决shell脚本中交互相关的问题

使用expect需要依赖tcl语言,所以需要优先安装tcl和expect

yum -y install expect			#安装
rpm -q tcl						#检查安装
rpm -q expect					#检查安装
  • 使用expect编写脚本解释器需设置为#!/usr/bin/expect

  • spawn后面通常跟一个Linux执行命令,表示开启一个会话、启动进程,并跟踪后续交互信息

示例:

spawn passwd root
  • 判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回;只能捕捉由spawn启动的进程的输出;用于接收命令执行后的输出,然后和期望的字符串匹配。
  • send向进程发送字符串,用于模拟用户的输入;该命令不能自动回车换行,一般要加\r (回车)或者\n

示例:

expect "获取帮助" {send "n\r";}
  • 结尾结束符expect eof,表示交互结束,等待执行结束,退回到原用户,与spawn对应,比如切换到root用户,expect脚本默认的是等待10s,当执行完命令后,默认停留10s后,自动切回了原用户

  • interact执行完成后保持交互状态,把控制权交给控制台,会停留在目标终端而不会退回到原终端,这个时候就可以手工操作了,
    interact后的命令不起作用

注: expect eof与interact只能二选一

  • set,expect默认的超时时间是10秒,通过set命令可以设置会话超时时间,若不限制超时时间则应设置为-1。

示例:

set timeout 30

示例:

#免交互划分磁盘
#!/usr/bin/expect

set user [lindex $argv 0]					#参数引入

spawn fdisk $user							#追踪

expect "获取帮助" {send "n\r";}				#实现免交互,发送内容
expect "Select" {send "p\r";}
expect "分区号" {send "\r";}
expect "起始 扇区" {send "\r";}
expect "Last 扇区" {send "+10G\r";}
expect "已设置为 Linux 类型" {send "w\r"}

expect eof                      		  #结束符
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值