十、Shell脚本:免交互

一、Here Document免交互
Here Document常规用法
二、Expect基本命令
Expect执行方式
Expect案例

1.1 Here Document概述
(1)使用I/O重定向的方式将命令列表提供给交互式程序
(2)标准输入的一种替代品
(3)语法格式
命令 <<标记


标记

示例用法
[root@localhost ~]# cat <<EOF
> hello
> hello
> EOF
hello    
hello
[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
示例在shell脚本里面使用免交互
#!/bin/bash
cat <<EOF
    hello
EOF

cat <<-EOF          -可用执行命令时不展示tab键空格
        hello       hello前面为tab键空格
EOF

在这里插入图片描述
使用免交互进行磁盘分配
在这里插入图片描述
在这里插入图片描述

示例修改使用免交互修改用户密码
[root@localhost ~]# passwd zhangsan <<EOF
> 123
> 123
> EOF
更改用户 zhangsan 的密码 。
新的 密码:无效的密码: 密码少于 8 个字符
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
定义变量用法
[root@localhost ~]# read a <<XX
> 20
> XX
[root@localhost ~]# echo $a
20

1.2、Here Document使用注意事项
(1)标记可以使用任意合法字符
(2)结尾的标记一定要顶格写,前面不能有任何字符
(3)结尾的标记后面也不能有任何字符(包括空格)
(4)开头标记前后的空格会被省略掉
1.3、Here Document多行注释
(1)、通过Here Document方式使Bash支持多行注释
(2)、语法格式
: <<DO-NOTHING
第一行注释
第二行注释

DO-NOTHING

2.1、Expect概述Expect
●建立在tcl之上的一个工具
●用于进行自动化控制和测试
●解决shell脚本中交互相关的问题

2.2Expect安装
(1)挂载光盘
(2)制作本地YUM源
(3)执行安装命令

安装执行命令
yum -y install expect
rpm -qa|grep expect
rpm -qa|grep tcl

2.3、基本命令
expect
●判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
●只能捕捉由spawn启动的进程的输出
●用于接收命令执行后的输出,然后和期望的字符串匹配
send
●向进程发送字符串,用于模拟用户的输入
●该命令不能自动回车换行,一般要加\r (回车)
spawn
●启动进程,并跟踪后续交互信息
结束符
●expect eof
等待执行结束
●interact
执行完成后保持交互状态,把控制权交给控制台

set
●设置超时时间,过期则继续执行后续指令
●单位是秒
●timeout -1表示永不超时
●默认情况下,timeout是10秒
exp_continue
●允许expect继续向下执行指令
send_user
●回显命令,相当于echo

接收参数
●Expect脚本可以接受从bash传递的参数
●可以使用[lindex $argv n]获得
●n从0开始,分别表示第一个,第二个,第三个…参数

示例使用免交互进入另一台服务器
yum -y install expect  
#!/usr/bin/expect

spawn ssh root@192.168.153.220

expect {                      expect后面写会出现的期待值
       "(yes/no)"           第一次连接会有是否连接选项
       { send "yes\r"; }
       "password:"
        { send "123123\r"; }
}

interact

在这里插入图片描述

示例登录另一台服务器查看信息并且退出
#!/usr/bin/expect

spawn ssh root@192.168.153.220

expect {
       "password:"
        { send "123123\r"; }
}

#interact      

expect "#"
send "ls\r"
send "ifconfig ens33\r"
send "exit\r"
expect eof

在这里插入图片描述

引用位置变量登录服务器
#!/usr/bin/expect
set timeout 10      设置超时多少秒退出
set user root
set ip [lindex $argv 0]
set pass [lindex $argv 1]

spawn ssh root $user@$ip

expect {
       "password:"
        { send "$pass\r"; }
}

#超时时间
set timeout 20 登陆超时多少秒退出
#开启日志文件
log_file test.log 日志记录操作
#显示信息
log_user 1 1为屏幕输出信息,0为不输出

示例
#!/bin/bash

expect -c "
spawn ssh root@192.168.153.220
expect \"password:\" { send \"123123\r;exp_continue\" }
expect \"]$\"  { send \"ifconfig ens33\r\" }
expect \"]$\"  { send \"exit\r\" }
expect eof
"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值