shell免交互

免交互:

交互:计算机播放器,放视频,发出指令,计算机执行指令,做出对应的动作,播放视频。

linux系统中的交互,passwd

尤其在shell脚本中,我们的运行就是免交互,自动化运维。

两种here Document免交互

expect语法实现免交互

here Doucument

语法格式:

命令 << 标记

内容

以标记为结尾

1、标记名称可以自定义,但必须要是合法字符(字母开头,后面跟上数字,不要有特殊符号)

2、标记的结尾一定要顶格写,前面不能有任何字符,包括空格。

3、结尾的标记后面也不能有任何字符,包括空格。

4、开头标记前面如果有空格,会被省略。

expect:建立在tcl语言基础上的一个工具,用于自动化控制和测试,主要用来解决shell当中的交互问题。

转义字符:

1、\n表示换行符

2、\t表示制表符tab键

3、\r表示回车,可以和\n通用

4、\b表示退格符,相当于backspace

第一步:

#!/usr/bin/expect

第二步:

开启跟踪执行的命令:

spawn开启一个绘画和启动进程,并且跟踪后续的交互信息

spawn passwd dn

第三步:

捕获动作

expect捕获想要的内容,匹配输入字段,然后输入内容

第四步:
方式一:

发送指令

send向进程发送字符串,模拟用户输入的内容,send命令不能自动换行,一般后面要跟上\r或\n

expect“新的密码:"{send "abc123\r"}

写在一行必须要加花括号

方式二:

expect“密码”

send"abc123"

多分支:

expect

{

“密码1:”{send "abc123\r"}

“’密码2:”{send "abc123\r"}

}

第五步:定义结束符号

expect eof

交互结束之后,会退回到原用户。

su - dn

root

interact

执行结束之后,保持现有状态不变

结束符号只能二选一,不能同时存在

参数设置:

set设置命令

set timeout 5

设置脚本的超时时间5秒

默认是10秒

exp_continue

相当于在expect捕获判断之后,还能继续向下匹配。

类似于continue,表示允许expect继续向下执行指令。

expect { "(yes/no)" {send "yes\n";exp_continue}

"password" {send "abc123\n"} } expect eof

否则报错

打印功能:回显命令

send_user跟echoy一个作用,打印一个字符串。

接收参数:

可以接受从bash的命令传入的参数。类似于位置变量的格式

set hostname [ lindex $argv 0]

set passwd [ lindex $argv 1]

hostname=$1

passwd=$2

执行方式:

bash sh source都不能执行expect脚本,必须赋权之后用./或者绝对路径执行

嵌入执行模式:将expect的过程融入shell当中,一块执行

#!/usr/bin/expect

免交互:

/usr/bin/expect <<-EOF

EOF

shell免交互_第1张图片

你可能感兴趣的:(linux,笔记)