实现简单的免交互

一、免交互

1.1 简单解释免交互

交互:在计算机中,交互一般指发出指令控制程序的运行,程序在接收到指令之后按照指令的效果做出对应的反应。

免交互:间接地通过第三方的方式把指令传送给程序,不用直接地下达指令。一般通过脚本。

Here Document 免交互

这是命令行格式,也可以写在脚本当中。通过I/O重定向的方式将命令的列表传送给交互式程序或命令。是标准输入的一种替代品,代替了人工的输入方式。

语法格式:

命令(Linux的系统命令) <<标记
内容1
内容2
内容3
标记

注意事项:

  1. 标记可以是任意合法字符,一般不用特殊字符、不以数字开头,通常以EOF作为默认的标记位。
  2. 结尾的标记一定要顶格写,前面不能有任何字符,空格也不行。
  3. 结尾的标记,后面也不能有任何字符,包括空格。
  4. 开头的标记前后的空格都会被省略掉,不影响标记的内容。

例:

cat <<EOF >>test1.txt
cat >>test1.txt <<EOF

上述都可以在命令行向test1.txt输入文本了,直到输入文本EOF作为结束标志

tee test1.txt <<EOF

tee主要用于从标准输入读取数据,并将其写入到一个或多个文件,同时也可以将数据输出到标准输出(通常是终端)。

1.2 变量赋值

变量赋值

vim c1.sh

#!/bin/bash
file="c1.txt"
i=school
cat > $file <<EOF
I am gonna boom boom $i
EOF
sh c1.sh
cat c1.txt

整体变量赋值

#!/bin/bash
var="Great! I'm gonna boom boom the school!"
myvar=$(cat <<'EOF'
This is Monday!
$var
EOF
)
echo $myvar
cat <<-EOF
# -EOF可以忽略tab的大空格,对小空格无效

1.3 Expect实现免交互

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

使用expect需要先安装expect

转义符:

  • \n :换行
  • \r :回车键
  • \t :横向制表符,相当于按TAB键
  • \b :退格,backspace

例:

#!/usr/bin/expect
#首行声明解释器,不再是默认的/bin/bash,需要声明
set timeout 5
#设置超时时间,expect有一个默认的超时时间10秒,这里手动设置为5秒

spawn passwd ykw
#spawn用来声明需要执行的命令,开启会话过程,并跟踪后续的交互信息
#相当于在命令行输入命令 passwd ykw

expect "新的 密码:"
#捕获需要执行的命令行

send "abc123\r"
#输入指令代码 abc123 \r表示输入回车

expect "重新输入新的 密码:"
send "abc123\r"

#最后一定要在下面两个指令中选取一行作为结束语,不能都写
expect eof
#交互指令结束之后,会退回原用户
interact
#交互指令结束之后,留在当前用户

expect免交互文件的解释器不是/bin/bash,不能用sh bash来执行,要赋权后,用.来执行,即需要先chmod 777 file,然后再执行

set :也可以用于设置变量

expect :捕获的时候不一定要捕获全文,只要能捕获到内容即可

例:传参到脚本执行:

#!/usr/bin/expect
set timeout 5
#传参的方式来表示
set username [lindex $argv 0]
set password [lindex $argv 1]
#上面的两个变量相当于shell脚本的位置变量$1,$2

#开始追踪
spawn su - $username
#免交互开始执行
expect "Password"
send "$password\r"
#继续捕获
expect "$username"
#expect "~]$"
send_user "ok\r"
#sleep 1
send "\x04"
#send_user 相当于 echo ,打印指定内容
#send "\x04" 是输入ASCII码的eof,使脚本结束
#结束语
expect eof
#interact
#会留在当前用户

1.4 嵌入执行模式

shell当中加入expect。涉及到环境的切换的场景不适合使用嵌套。如sshsu

例:

#!/bin/bash
user=$1
password=$2
#非交互命令。使用的是shell
useradd $user
#嵌入免交互
/usr/bin/expect <<-EOF
spawn passwd $user
expect "New"
send "${password}\r"
expect "Retype"
send "${password}\r"
expect eof
EOF

1.5 练习:

例:用expect实现ssh免交互登录root@20.0.0.20

#!/usr/bin/expect
set ip 20.0.0.20
set user root
set password 123
set timeout 5

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

expect {
		"yes/no" {send "yes\r";exp_continue}
#这里要捕获两次,表示该项被匹配之后,还能继续匹配其他的指定内容
#类似循环中的continue,允许expect语句继续向下执行
		"password" {send "$password\r"} 
}
interact

传参实现ssh

#!/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

例:一个脚本完成要求:免交互实现磁盘分区,分一个区即可,分完之后,第一步格式化,第二步实现挂载,手动挂载即可,然后在分区挂载点创建一个文件,写入内容"学习使我快乐!"并打印。

下面的操作都是对一个未分区的硬盘进行的:

#!/bin/bash
disk=$1
/usr/bin/expect <<-EOF
set timeout 5
spawn fdisk /dev/$disk
expect "Command" 
send "n\r"
expect {
		"Select" {send "\r";exp_continue}
		"Partition number" {send "\r";exp_continue}
		"First sector" {send "\r";exp_continue}
		"Last sector" {send "\r";exp_continue}
		"Command" {send "w\r"}
}
expect eof
EOF

partprobe
lsblk | grep "${disk}1"
if [ $? -eq 0 ];then
  echo "分区/dev/${disk}1已建立!"
else
  echo "未检测到分区,请检查!"
  exit
fi
mkfs.xfs /dev/${disk}1
mkdir /opt/${disk}1
mount /dev/${disk}1 /opt/${disk}1
echo "学习使我快乐" > /opt/${disk}1/test.txt
cat /opt/${disk}1/test.txt
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Echarts是一款流行的可视化开源库,提供费的源代码供用户使用。它能够帮助用户以简单、美观和交互性强的方式展示数据,从而帮助用户更好地理解和分析数据。 使用Echarts实现可视化系统的费源码是十分简单的。首先,需要引入Echarts的库文件到项目中,这可以通过下载Echarts官网提供的最新版本来完成。然后,用户可以根据自己的需求,在项目中创建一个HTML文件,并在其中使用Echarts提供的相关API进行数据的可视化操作。 Echarts提供了丰富的图表类型,包括折线图、柱状图、饼图等。用户可以根据具体的数据类型和展示需求选择合适的图表类型进行展示。通过设置相关的配置项和数据,可以自定义图表的样式、颜色、大小等属性,从而使得图表更加符合用户的需求。 另外,Echarts还提供了丰富的图表交互功能,如数据筛选、数据联动、图表切换等。用户可以通过这些功能实现对数据的灵活探索和展示。同时,Echarts还支持与其他JS库和框架的集成,如React、Vue等,方便用户在项目中使用。 总结来说,Echarts是一款功能强大、费开源的可视化库,使用其实现可视化系统的费源码非常方便。用户只需要引入相关的库文件,并使用提供的API进行数据的可视化操作,就能轻松地实现自定义样式、交互功能丰富的图表展示。无论是个人项目还是商业应用,Echarts都能为用户提供优秀的可视化解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值