免交互和嵌入执行模式

目录

概念

语法格式

统计行数

赋值变量

修改密码​编辑往文件里添加内容

​编辑​编辑引入变量

整体赋值​编辑

加引号不赋值变量

expect实现免交互

免交互设置密码

免交互切换用户

嵌入执行模式 

添加用户并免交互设置密码

免交互登录

传参实现ssh

练习


概念

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

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

免交互的方式:

免交互 全名 Here Document 

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

语法格式

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

内容1

内容2

内容3

标记

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

注意事项:

1.标记可以是任意合法字符(一般不用特殊字符,不以数字开头,通常以EOF作为默认的标记位)2.结尾的标记一定要顶格写,并且前面不能有任何字符,空格也不行

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

4.开头的标记前后的空格都会被省略 

统计行数

赋值变量

修改密码往文件里添加内容

引入变量

整体赋值

加引号不赋值变量

expect实现免交互

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

转义符:

\n:换行

\r:相当于回车

\t:相当于tap键

\b:退格,相当于删除键

免交互设置密码

免交互切换用户

嵌入执行模式 

添加用户并免交互设置密码

免交互登录

传参实现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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值