网站排名优化公司推荐,索莱宝做网站,做ppt的网站叫什么名字,表白网页生成器手机版如何实现免交互
一、免交互
交互#xff1a;我们发出指令控制程序的运行#xff0c;程序在接收到指令之后按照指令的效果做出对应的反应
免交互#xff1a;间接的通过第三方的方式把指令传送给程序#xff0c;不用直接的下达指令
Here Document免交互#xff1a;这是命…如何实现免交互
一、免交互
交互我们发出指令控制程序的运行程序在接收到指令之后按照指令的效果做出对应的反应
免交互间接的通过第三方的方式把指令传送给程序不用直接的下达指令
Here Document免交互这是命令行格式也可以写在脚本当中通过I/O重定向的方式将命令的列表传送给交互式程序或命令。是标准输入的一种替代品代替了人工的传输方式。
语法格式
命令 linux的系统命令标记
内容1
内容2
内容3
标记注意事项
1、可以是任意合法字符一般不用特殊字符不以数字开头通常以EOF作为默认的标记位 2、结尾的标记位一定要顶格写且前面不能有任何字符空格也不行 3、结尾的标记后面也不能有任何字符包括空格 4、开头的标记前后的空格都会被省略掉
举例
1.1
wc -l xy102123456789xy102
3 #表示三行1.2
read i EOFtest1EOF
echo $i
test11.3 创建用户和密码
passwd xiaodai EOF123123EOF1.4 在命令行往文本输入内容
cat EOFtest2.txtaaabbbcccEOFcat test2.txt EOFaaabbbcccEOFcat test2.txt
aaa
bbb
ccc1.5 tee命令在EOF结束后直接打印内容
tee test3.txt EOF12EOF
1
2ls
cat test3.txt
1
2引入变量
vim test1.sh
#!/bin/bash
filetest1.sh
ischool
cat $file EOF
I am going to $i
EOFcat test1.sh
I am going to school整体变量赋值
# 整体变量赋值
vim test2.sh
#/bin/bash
varGreat! I am going to school
myvar$(cat EOF ### myvar$(cat EOF
this is monday
$var
EOF
)
echo $myvar ### this is monday $varsh test2.sh
this is monday Great! I am going to school重定向中打印tab键和空格键
vim test2.sh
#!/bin/bash
cat -EOFtest1 # 三次tab键 test2 #一次空格
EOFsh test2.sh
test1test2二、Expect实现免交互
用tcl语言写的一个工具主要用自动化控制和测试解决shell脚本的交互问题。
安装expect
rpm -q expect
yum -y install expect转义符
\n换行
\r回车
\t相当于一个tab键
\b表示退格删除
举例
1.1 指定用户和密码vim passwd.sh
#!/usr/bin/expect
#声明解释器不再是默认的bash。需要声明
set timeout 5
#set相当于设置timeout超时时间expect有一个默认的超时时间10秒设置超时时间5秒。
#也可以作为设置变量spawn passwd xiaodai
#spawn后面用来声明需要执行的命令开启会话过程并且跟踪后续的交互信息expect 新的 密码:
#捕获需要执行的命令行只要能够捕获即可不需要完整的可以*代表所有send abc123\r
输入指定代码expect 重新输入新的 密码:
send abc123\r#最后一定要有结束语下面两个都可作为结束语但是只能选一个
expect eof
#交互指令结束之后会退回原用户切换回之前的用户
interact
# 留着当前用户不会动chomd 777 passwd.sh
./passwd.sh1.2 传参表示免交互 vim test1.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即打印指定内容
#结束语
expect eof
# 使用expect eof会跳转ok再跳转命令行
#interact
# 使用interact只跳转ok不跳转命令行chmod 777 test2.sh
su - test1
cd /opt
./test2.sh dn abc1231.3 嵌套模式
在shell当中加入expect。设计到环境切换的场景不建议使用嵌套。如 ssh 、su不适合使用嵌入模式
1.3.1 vim qiantao.sh
#!/bin/bash
user$1
password$2
#非交互命令使用的是shell
useradd $user
#嵌入免交互
/usr/bin/expect -EOF
spawn passwd $user
expect 新的*
send $password\r
expect 重新*
send $password\r
expect eof
EOFchmod 777 qiantao.sh
./qiantao.sh 用户名 密码1.3.2 ssh免密登录root192.168.100.10
vim ssh.sh
#!/bin/bash
set ip 192.168.100.10
set user root
set password 123
set timeout 5#进入命令行交互
spawn ssh $user$ipexpect {yes/no {send yes\r;exp_continue}
#这里需要捕获两次表示该项被匹配之后继续匹配其他的指定内容类似于循环的continue#允许expect语句继续向下执行*password {send $password\r}
}
interactchmod 777 ssh.sh
./ssh.sh 1.3.3 传参实现ssh远程控制
#!/usr/bin/expect
set timeout 5
set hostname [lindex $argv 0]
set password [lindex $argv 1]#进入命令格式
spawn ssh $hostnameexpect {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}
}
interactchmod 777 test5.sh
./test5.sh root192.168.100.11要求免交互实现硬盘分区分一个区即可分完之后第一步要格式化第二步实现挂载挂载手动挂载然后在这个分区的挂载创建一个文件写入内容学习真好并且打印出结果以上在一个脚本里面完成。
提示使用嵌入模式。
vim cipan.sh
#!/bin/bash
/usr/bin/expect -EOF
spawn fdisk /dev/sdb
expect 命令(输入 m 获取帮助)
send n\r
expect *Partition type:
send \r
expect *Select (default p):
send \r
expect *分区号 (1-4默认 1)
send \r
expect *起始 扇区 (2048-41943039默认为 2048)
send \r
expect *Last 扇区, 扇区 or size{K,M,G} (2048-41943039默认为 41943039)
send \r
expect 命令(输入 m 获取帮助)
send w\r
interact
EOF
mkfs.xfs -f /dev/sdb1
mkdir /data
mount /dev/sdb1 /data
echo 学习真好 /data/123.txt
cat /data/123.txtchmod 777 cipan.sh
./cipan.sh
学习真好