当前位置: 首页 > news >正文

Linux:Shell编程之免交互

目录

绪论

1、here   Document免交互

1.1 格式

1.2 cat结合免交互实现重定向输出到指定文件

 1.3 变量替换

2、Expect免交互

2.1 三种写法

3、免交互实现普通用户切换root

3.1 send_user

4、接收参数

5、嵌入执行模式

6、ssh远程登录


绪论

免交互:不需要人为控制就可以完成的自动化操作(自动化运维)

1、here   Document免交互

使用i/o(输入/输出)重定向的方式,将命令的列表提供给交互式的程序或者命令

cat read 是一种标准输入,只能接受正确的指令或者命令

1.1 格式

命令  <<标记

...

...

标记

eg:

注意事项

· 标记可以使用人以合法字符(通常用EOF)

· 结尾的标记一定要顶格写,前面不能有任何字符

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

· 如果开头的标记前有空格,这个空格会被自动省略 

eg:read  i  <<EOF      read只能输入一次

>123

>EOF

echo  $i

1.2 cat结合免交互实现重定向输出到指定文件

 1.3 变量替换

vim  test.sh进入编辑

#!/bin/bash

file="test.txt"

i="school"

cat  >  $file  <<EOF

I  am  going  to  $i

EOF  保存退出

2、Expect免交互

tcl语言基础之上的一种工具,自动化测试和控制,在脚本中解决交互的问题

转义符:\n 换行 \t制表符,tab键 \r回车 \b退格键,就是删除键

基本命令格式: #!/usr/bin/expect

语法:

· spawn后面通常跟一个linux的执行命令,表示开启一个会话,启动一个进程,并且跟踪后续的交互信息

· expect,捕获,上一次执行的命令中,是否包含指定的字符串,如果有立即返回,否则等待超时,自动退出(默认超时时间为10s)

· expect 只能捕获由spawn启动的进程输出

· send 向进程发送字符串,用于模拟用户的输入,该命令不能自动回车,一般后面加一个回车键:\r 或者\n

2.1 三种写法

第一种写法
#!/use/bin/expect
set  timeout  5
spawn  passwd  lisi
expect  "新的密码"
send  "abc123\r"
expect  "重新输入新的密码"
send  "abc123\r"
expect  eof第二种写法
#!/use/bin/expect
set  timeout  5
spawn  passwd  lisi
expect  "New  password"  {send  "123\r"}
expect  "Retype  new  password"  {send  "123\r"}
expect  eof第三种写法:多分支结构
#!/use/bin/expect
set  timeout  5
spawn  passwd  lisi
expect{
"密码1"{send  "abc123\r"}
"密码2"{send  "abc123\r"}
"密码3"{send  "abc123\r"}      只要匹配其中一个情况,执行相应的send语句,然后退出}
结束符
expect  eof   会切换回之前的终端
interact 留在当前终端不变
set 设置超市等待时间,默认是10s
set timeout 5  -1()则表示永不超时

3、免交互实现普通用户切换root

vim  qiehuan.sh
#!/usr/bin/expect
set  timeout  5
spawn  su  root
expect  "passwd"
send  "123\r"
expect  eof  保存退出
chmod 777 目录
su  -  lisi
sh  qiehuan.sh

expect_continue 可以在expect判断之后,继续匹配expect,捕获的其他内容,类似于脚本中continue,表示允许继续向下执行指令

使用expect_continue的结束语不能使用expect  eof

expect  {

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

"passwd"  {send"123\r"}

}

3.1 send_user

send_user 会先信息,相当于echo跟上用户想要输出的内容

4、接收参数

类似于shell当中的位置变量$1 $2

set  hostname  [linux  $argv  0]  $1

 set  password  [linux  $argv  0]  $2

eg:
set  timeout  5
set  usr  [lindex  $argv  0]
set  passwd  [lindex  $argv  1]
spawn  su  -  $user
expect  "密码" (或者passwd)
send  "$passwd\r"
expect  "]$"
send_user  "普通用户"
expect  "]#"
send_user  "管理员"
interact  
保存退出
./qiehuan  lisi  123

5、嵌入执行模式

如果涉及终端切换,最好不要用嵌入模式

将expect过程融入shell中,方便执行和处理

eg:vim  useradd.sh
#!/bin/bash
user=$1
passwd=$2
useradd  $user
/usr/bin/expect  <<  -EOF
#expect 开始表示
spawn  passwd  $user
expect  "新的*"
send  "${passwd}\r"
expect  "重新*"
send  "${passwd}\r"
expect  eof
EOF
保存退出
sh  useradd.sh  lisi  123

6、ssh远程登录

#!/usr/bin/expect
set ip 192.168.233.30  #指定远程登录的ip地址
set user root
#指定为root用户
set password 123
#设定密码为123
set timeout 5spawn ssh $user@$ip   
expect  {"yes/no" isend "yes\r" ;exp_continue}
"password" isend " $password\r" }
}
expect eof保存退出
chmod   777   ssh.sh
./ssh.sh

6.1 通过传参的方式实现

#!/usr/bin/expect
set name [lindex $argv 0]
set ip [lindex $argv 1]
set password [lindex $argv 2]
set timeout 5
spawn ssh
$name@$ip
expect {
"refused" {send_ _user "访问被拒绝\r"}
"No route to host" {send_ _user "主机名或者ip地址有误\n"}
"yes/no" {send "yes\r" ;exp_ continue}
password" {send " $password\r"}
}
expect eof

保存退出

./ssh.sh  root  20.0.0.30  123

http://www.lryc.cn/news/122111.html

相关文章:

  • 最强自动化测试框架Playwright(18)- 执行js脚本
  • 阿里云云主机_ECS云服务器_轻量_GPU_虚拟主机详解
  • [QT编程系列-41]:Qt QML与Qt widget 深入比较,快速了解它们的区别和应用场合
  • springboot 使用zookeeper实现分布式锁
  • ViewUI表格Table嵌套From表单-动态校验数据合法性的解决方法
  • 服务器安装Tomcat
  • 【Apollo】自动驾驶的平台背景,平台介绍
  • docker 安装与配置
  • Titanic--细节记录三
  • k8s-----集群调度
  • 01-Spark环境部署
  • HOT86-单词拆分
  • 开源数据集分类汇总(医学,卫星,分割,分类,人脸,农业,姿势等)
  • Linux:Firewalld防火墙
  • mysql死锁;锁表排查
  • YAMLException: java.nio.charset.MalformedInputException: Input length = 1
  • 无需求文档,保障测试质量的可行性做法
  • SpringBoot项目学习笔记
  • 如何在Vue表单处理中实现表单字段的文件下载
  • SSL证书DV和OV的区别?
  • 计算机竞赛 GRU的 电影评论情感分析 - python 深度学习 情感分类
  • 论文阅读 - Neutral bots probe political bias on social media
  • Fabric系列 - 知识点整理
  • 多目标优化算法之樽海鞘算法(MSSA)
  • 阿里云轻量应用服务器使用教程_创建配置_远程连接_网站上线
  • 自监督学习的概念
  • C#多线程开发详解
  • Linux 基础篇(六)sudo和添加信任用户
  • 【Linux】程序地址空间
  • springboot 设置自定义启动banner背景图 教程