shell 免交互

Shell免交互

也就是不需要进入到文件内部,可以在文件外对文件内容进行操作

Sed :改 ,新增,最强大的功能

Awk :按行取列

如何对文本内容进行免交互

Here document  免交互

对文本内容进行免交互

对文本内容进行操作

标准输入的替代品

语法格式

命令 << 标记

内容

标记

命令:linux命令

举例:wc -l  <

> 123

> 456

> 789

> ky32

shell 免交互_第1张图片

标记以什么为开头,就以什么为结尾结束

注意事项

  1. 标记可以使用任意合法字符,(字母和数字,一般不使用特殊符号,也不使用特殊符号做开头,以字母作为开头)
  2. 结尾的标记一定要顶格写,且结尾的标记前不能有任何字符(空格也不能有)

开头的标记可以加空格,但是会被自动省略(开头标记前也没有空格)

shell 免交互_第2张图片

shell 免交互_第3张图片

Tee 本身就具有标准输出的作用,可以直接把内容输入到文件当中

shell 免交互_第4张图片

shell 免交互_第5张图片

整体赋值给变量

shell 免交互_第6张图片

shell 免交互_第7张图片

shell 免交互_第8张图片

免交互su

#!/usr/bin/expect

Set timeout 5

#设置超时时间

Set  username [lindex  $argv  0]   

Set  passwd [lindex  $argv  1]

#传参,相当于shell的位置变量 $1  $2

Spawn su - $username

#开始追踪命令

Expect  “密码”

Send  “$passwd\r”

Expect  “*]#”

Send_user  “ok,root”

Expect eof  (自动跳回之前)

Interact (留在当前)

shell 免交互_第9张图片

shell 免交互_第10张图片

嵌入执行,将expect免交互的过程和shell结合起来

Ssh su 会涉及到终端切换,不建议使用嵌入式执行

示例

免交互

#!/bin/bash

User=$1

Passwd=$2

#不需要交互的命令可以放在expect外面执行

Useradd  $user

#密码环节可以开始执行免交互

/usr/bin/expect  <<-EOF

#开启执行expect 的标识,仅限于嵌入式

Spawn passwd  $user

Expect  “新的*”

Send “${passwd}\r”

#{}加不加都行\r等于打了一个回车

Expect “从新*”

Send  “${passwd}\r”

Expect  eof

EOF

shell 免交互_第11张图片

shell 免交互_第12张图片

示例

免交互远程连接ssh

#!/usr/bin/expect

#声明使用的解释器

Set ip 192.168.233.10

Set user root

Set passwd 123

#分别申明号连接的ip地址,用户名和密码

Set timeout 5

#设置超时时间5s

Spawn ssh $user@$ip

#开始捕获ssh root@$192.168.233.10

Expect {

“connecting (yes/no)?” {send “yes\r”;exp_continue;}

“password” {send “passwd\r}

}

Expect eof (这个时候不适合使用)

Interact  (这个时候使用)

shell 免交互_第13张图片

示例

#!/usr/bin/expect

#传参的方式执行,自定义用户密码

Set  timeout 5

Set  username  [lindex $argv 0]

Set passwd [lindex $argv 1]

#传参

#开启进程,捕获

Spawn  ssh  $username

#捕获条件

Expect {

“No route to host” {send_user “主机名或ip有误\n”}

“Connection refused” {send_user “ssh访问请求被拒绝\n”}

“(yes/no)?” {send “yes\r”;exp_continue;}

“password” {send “$passwd\r”}

}

Interact

Interact 后面的命令不会再继续执行

shell 免交互_第14张图片

免交互

Here document :主要是用在文本文件,给文件输入内容,以命令为开头 <

Cat < test.txt

内容

EOF

Tee test.txt <

内容

EOF

第二种

Expet

#!/usr/bin/expect

set传参设置参数

Set timeout 5

Set hostname [lindex $argv 0]

$1

Set hostname [lindex $argv 1]

$2

Spawn passwd dn

开启命令或者进程

Expect

捕获命令关键字

一律用引号引起来

“密码” send (send是用来模拟用户输入的) “123456\r(或者n)”

结束符

Expect  eof :返回上一次执行的终端

Interact :停留在当前终端,后面的命令不会再执行

嵌入式:是将expect和shell脚本结合使用 ,expect其主要作用就是为了解决shell脚本的交互问题,设计终端切换,一般不使用嵌入式执行

#!/bin/bash

shell当中执行不需要交互的命令

需要交互的指令交给expect

/usr/bin/expect <<-EOF

在shell脚本中开启免交互指令

结束符写在EOF之前

Interact

EOF

你可能感兴趣的:(前端,javascript,开发语言)