shell脚本之免交互

一、Here Document 

1.概述

Here Document 是一种在 Unix 和 Unix-like 操作系统的 shell 中使用的输入重定向方式,允许你在命令行或脚本中嵌入多行文本。它通常用于将一大段文本传递给命令或程序,而无需使用外部文件。Here Document 使用 << 符号引导,后跟一个标识符,然后在接下来的行中包含文本,最后用相同的标识符结束

2.格式与用法

2.1 基本语法格式:

命令   << 标记
...
...

标记

特殊字符“<<”在标记和命令之前,这样做的目的是将命令块的输出重定向到程序或命令的 stdin。标记的选择要确保不会出现在其他地方,避免出现混淆;两个标记之间的内容被当做是一个文件并用作“命令”的标准输入。另外 Here Document 也可以与非交互式程序和命令一起使用

2.2 四点注意事项:

  • 标记可以使用任意的合法字符;
  • 结尾的标记一定要顶格写,前面不能有任何字符;
  • 结尾的标记后面也不能有任何字符(包括空格); 
  • 开头的标记前后的空格会被省略

2.3 基本用法:

直接把输入的命令行进行输出

输入保存到文件

追加输入保存到文件

2.4 Here Document 免交互

例:给用户修改密码

例:通过read 命令接受输入,设置变量

例:在写入文件时会先将变量替换成实际值,再结合cat命令完成写入

二、expect

1. expect概述

expect 是一个在Linux系统中常用的命令行工具,用于自动化与交互式程序的交互。它基于Tcl(Tool Command Language),允许用户编写脚本来控制和自动化交互式程序的输入和输出

2. expect安装

rpm -q expect
 
rpm -q tcl
 
yum -y install expect    //yum或者光盘安装都可

3. expect 基本命令

(1) 脚本解释器
expect脚本中首先引入文件,表明使用的是哪一个shell。
#!/usr/bin/expect

(2) spawn
spawn后面通常跟一个Linux执行命令,表示开启一个会话、启动进程,并跟踪后续交互信息。
例: spawn passwd root

( 3 ) expect
判断上次输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回;只能捕捉由spawn启动的进程的输出;用于接收命令执行后的输出,然后和期望的字符串匹配

( 4 ) send
向进程发送字符串,用于模拟用户的输入;该命令不能自动回车换行,一般要加\r(回车)或者\n

( 5 ) Interact

允许用户与程序交互。

4. 用Expect编写脚本

4.1 无交互登录到远程服务器

#!/usr/bin/expect 
spawn ssh root@192.168.192.50
expect {
        "password:"
        { send "123456\r"; }
}
interact

4.2 创建用户,无交互设置密码

[root@localhost home]# vim user.sh
 
#!/bin/bash
username=$1
 
useradd $username
 
/usr/bin/expect <<-EOF
 
spawn passwd $username
expect {
"密码"     
{send "123456\r";exp_continue}
"新的密码"
{send "123456\r";}
}
EOF

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值