Shell脚本⑧免交互

目录

一.Here Document

1.定义

2.变量

(1)变量替换成实际值

(2)整行内容作为变量并输出结果

(3)多行注释

(4)自动划分磁盘免交互

二.Expect

1.定义

2.安装

3.免交互操作

(1)脚本编辑器

(2)spawn

(3)expect

(4)send

(5)exp_continue

(6)expect eof

(7)interact

(8)set

(9)send_users

(10)接收参数

4.免交互su切换用户


一.Here Document

格式:
命令 <<标记
.......
内容			#标记之间是传入内容
.......
标记

1.定义

  • 使用I/O重定向的方式将命令列表提供给交互式程序

  • 标准输入的一种替代品,可以帮助脚本开发人员不必使用临时文件来构建输入信息,而是直接就地 生产出一个文件并用作命令的标准输入,Here Document 可以与非交互式程序和命令一起使用

2.变量

Here Document 也支持使用变量,如果标记之间有变量被使用,会先替换变量值。如 果想要将一些内容写入文件,除了常规的方法外,也可以使用 Here Document。如果写入 的内容中包含变量,在写入文件时要先将变量替换成实际值,在结合 cat 命令完成写入。

(1)变量替换成实际值
#!/bin/bash
file="EOF1.txt"
var="KY35"
cat > $file <

Shell脚本⑧免交互_第1张图片

(2)整行内容作为变量并输出结果
#!/bin/bash
file="2.txt"
var="school"
my=$(cat <$file
I am going $var
EOF
)
echo $my

Shell脚本⑧免交互_第2张图片

(3)多行注释
#!/bin/bash
file="3.txt"
var="KY35"
myvar=$(cat <$file
My name is $var.
How old are you?
Do you want play with me?
 
EOF
)
echo $myvar
###下面部分就被注释了不会显示
:<

Shell脚本⑧免交互_第3张图片

(4)自动划分磁盘免交互
fdisk /dev/sdb < n
> p
> 
> 
> 
> 
> w
> EOF

Shell脚本⑧免交互_第4张图片

二.Expect

1.定义

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

2.安装

yum install expect -y

Shell脚本⑧免交互_第5张图片

3.免交互操作

(1)脚本编辑器
#!/usr/bin/expect
(2)spawn

启动新的进程并监控和捕捉

(3)expect

从进程接受字符串

(4)send

用于向进程发送字符串

方法一:
expect "密码"{send "123123\r"}					#同一行send部分要有{  }

方法二:
expect"密码										#换行send部分不需要有{ ) 
send "abc123\r"

方法三:
expect											#只要匹配了其中一个情况,执行相应的send语句后退出该expect语句
{											
"密码1" {send "123123\r"}
"密码2" {send "abcdef\r"}
"密码3" {send "abc123\r"}
}
(5)exp_continue

继续进行进程捕获

(6)expect eof

结束符,表示交互结束,等待执行结束,退回到原用户,与spawn对应。

(7)interact

允许用户交互

  • 会停留在目标终端而不会退回到原终端,这个时候就可以手工操作了,interact后的命.令不起作用;

  • 比如interact后添加exit,并不会退出root用户。而如果没有interact则登录完成后会退出,而不是留在远程终端上。

  • 使用interact会保持在终端而不会退回到原终端;

注意∶ expect eof 与 interact 只能二选一

(8)set

设置会话超时时间

(9)send_users

回显命令,类似于echo

(10)接收参数

expect 脚本可以接受从bash命令行传递参数,使用     [ lindex $argv n ]    获得。其中你从0开始,分别表示第一个,第二个,第三个.....参数

set hostname [lindex $argv 0]						#相当于 hostname=s§1				
set password [lindex Sargv 1]						#相当于 password=$2					

4.免交互su切换用户

#!/usr/bin/expect
#开启ssh命令,ssh后面跟要远程控制的IP地址
spawn ssh 192.168.79.220
expect {
        "yes/no" { send "yes\n";exp_continue }
        "password" { send "123123\n"}
 
}
interact

Shell脚本⑧免交互_第6张图片

你可能感兴趣的:(服务器,运维)