Shell编程之免交互

本章结构

Here Document免交互
Here Document常规用法
Expect基本命令
Expect执行方式
Expect案例
[root@localhost~]# cat <<EOF
> hello
> world
> EOF
hello
world
[root@localhost~]# cat <<xxx  //自定义标识符
> hello
> xxx
hello
编辑本地yum源配置文件
[root@localhost~]# cat > yum.repo <<EOF   
> [test]
>  name=test
>  baseurl=file://mnt
>  enabled=1
>  gpgcheck=0
>  EOF
[root@localhost~]# cat yum.repo
[test]
name=test
baseurl=file:///mnt
enabled=1
gpgcheck=0         如果需要新增文件可以用>>追加
注:> 一个则覆盖  >>两个则是追加
[root@localhost~]# cat > yum.repo <<EOF
> hello
> EOF
[root@localhost~]# cat yum.repo
hello
[root@localhost~]# cat > yum.repo <<EOF
> world
> EOF
[root@localhost~]# cat > yum.repo
hello
world
[root@localhost~]# passwd zhangsan <<EOF
> 123
> 123
> EOF    更改用户zhangsan 的密码  

在这里插入图片描述
EOF前面加-,屏蔽制表符,直接输出内容

[root@localhost~]# aa=$(cat <<EOF   //变量替换
> 20
> EOF
> )
[root@localhost~]# echo $aa
20  10
[root@localhost~]# aa=$(cat <<'EOF'  // 关闭替换变量
20
$a
EOF
)
Here Document使用注意事项
  • 标记可以使用任意合法字符
  • 结尾的标记一定要顶格写,前面不能有任何字符
  • 结尾的标记后面也不能有任何字符(包括空格)
  • 开头标记前后的空格会被省略掉
Here Document免交互
  • 通过read命令接收输入并打印
  • [root@localhost -]# vim here_non_interactive_read.sh
    [root@llocalhost -]# vim here_non_interactive_passwd.sh#/bin/bash
    passwd jerry <<EOF
    This_is password
    This_is_password
    EOF
    [root@locallhost -]J# chmod +x here_non_interactive_passwd.sh[root@localhost -J# .Jhere_non_interactive_passwd.sh
    注:passwd命令需要的密码和确认密码
Expect概述
Expect
  • 建立在tcl之上的一个工具
  • 用于进行自动化控制和测试
  • 解决shell脚本中交互相关的问题
Expect安装
  • 挂载光盘
  • 制作本地YUM源
  • 执行安装命令
[root@localhost ~]# yum -y install expect
[root@localhost~]# rpm -qalgrep expect
expect-5.45-14.el7_1.x86_64
[root@localhost ~]# rpm -qalgrep tcl
tcl-8.5.13-8.el7.x86_64

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

在这里插入图片描述
其中\r 相当于回车键
在这里插入图片描述
停留在211这个节点上,等待管理员操作
在这里插入图片描述
在这里插入图片描述

引用位置变量
set user root
set ip lindex $argv 0 //设置第一个位置变量为ip
set pass [lindex $argv 1]   //设置第二个位置变量为登录密码
# 超时时间
set timeout 20  //登录超时多少秒退出
#开启日志文件
log_file test.log  //日志记录操作
#显示信息
log_user 1    //1为屏幕输出信息,0为不输出


expect -c “
spawn ssh root@192.168.94.100
expect \"password:\" { send \"123456\r\" }
expect \"]#\" { send \"ificonfig ens33\r\" }
expect \"]#\" { send \"exit\r\" }
expect eof
"
set
  • 设置超时时间,过期则继续执行后续指令
  • 单位是秒
  • timeout -1表示永不超时
  • 默认情况下,timeout是10秒
exp_continue
  • 允许expect继续向下执行指令
send_user
  • 回显命令,相当于echo
接收参数
  • Expect脚本可以接受从bash传递的参数
  • 可以使用[lindex $argv n]获得
  • n从0开始,分别表示第一个,第二个,第三个…参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值