Linux免交互

免交互

交互:我们发出指令控制程序的运行,程序在接受到指令之后按照指令的效果做出对应的反应

免交互:间接的通过第三方的方式把指令传送给指定的程序,不用直接的下达指令

Here Document 免交互:

这是命令行格式,也可以写在脚本当中。通过I/O重定向的方式,将命令列表传送给交互式程序或命令。

是标准输入的一种替代品。代替了人工的输入方式。
语法格式:

命令(Linux的系统命令)<<标记

内容1

内容2

内容3

标记
注意事项:

1、标记可以是任意合法字符(一般不使用特殊字符,不以数字开头,通常EOF作为默认的标记为)

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

3、结尾的标记,前面不能有,后面也不能有任何字符

4、开头的标记前后的空格会被省略掉。
Expect实现免交互

用tcl语言写一个工具,主要是自动化控制和测试。解决shell脚本交互的问题。

转义符:

\n:换行

\r:表示回车

\t:制表符,相当于一个tab键

\b:表示退格,删除

less 复制代码
[root@test2 625]# vim su.sh

#!/usr/bin/expect
set timeout 5
#传参方式表达
set username [lindex $argv 0]
set password [lindex $argv 1]
#就是位置变量
#开始追踪
spawn su - $username
#免交互开始执行
expect "密码"
send "$password\r"
#继续捕获
expect    "~]$"
send_user    "ok"
#send_user = echo 打印指定内容
#interact
#结束语
expect eof

chmod 777 su.sh 
 ./su.sh 

嵌入式

less 复制代码
#!/bin/bash
user=$1
password=$2
#非交互的命令,使用的是shell
useradd $user
#嵌入免交互
/usr/bin/expect <<-EOF
spawn password $user
expect "新的*"
send "$password\r"
expect "重新*"
send "$password\r"
expect eof
EOF
less 复制代码
#!/usr/bin/expect
set ip 192.168.11.138
set user root
set password 123
set timeout 5

#进入命令行
spawn ssh $user@$ip

expect{
       "yes/no" { send "yes\r";exp_continue}
#这里捕获两次,表示该项被匹配之后,继续匹配其他的指定内容。类似循环的continue
#允许expect语句继续向下执行。
       "*passwd:" { send "$password\r"}
}
interact
less 复制代码
#连接其他主机

#!/usr/bin/expect
set timeout 5
set hostname [lindex $argv 0]
set password [lindex $argv 1]

spawn ssh $hostname

expect {

     "No route to host" {send_user "主机名/ip有误\n"}
     "Connection refused"  {send_user "ssh连接拒绝\n"}
     "(yes/no)" {send "yes\r";exp_continue}
     "password" {send "$password\r"}
}
interact
~          

[root@test2 625]# chmod 777 ssh1.sh 
[root@test2 625]# ./ssh1.sh root@192.168.11.138 123
相关推荐
千墨18 分钟前
VMware安装Centos 9虚拟机+设置共享文件夹+远程登录
linux·运维·centos
ChinaRainbowSea1 小时前
1. Linux下 MySQL 的详细安装与使用
linux·数据库·sql·mysql·adb
致奋斗的我们2 小时前
Nginx反向代理及负载均衡
linux·运维·mysql·nginx·负载均衡·shell·openeluer
百锦再2 小时前
在Linux上创建一个Docker容器并在其中执行Python脚本
linux·python·docker
忧虑的乌龟蛋2 小时前
嵌入式 Linux:使用设备树驱动GPIO全流程
linux·服务器·嵌入式·imx6ull·gpio·点灯·pinctrl
朝九晚五ฺ2 小时前
【Linux探索学习】第三十弹——线程互斥与同步(上):深入理解线程保证安全的机制
linux·运维·学习
小林熬夜学编程3 小时前
【MySQL】第八弹---全面解析数据库表的增删改查操作:从创建到检索、排序与分页
linux·开发语言·数据库·mysql·算法
m0_748236113 小时前
Spring Boot 实战:轻松实现文件上传与下载功能
linux·spring boot·后端
鱼不如渔3 小时前
leetcode刷题第十三天——二叉树Ⅲ
linux·算法·leetcode
梦游钓鱼4 小时前
beremiz笔记chatgpt,部署在Ubuntu:20.04版本
linux·笔记·ubuntu