免交互简单操作

免交互

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

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

Here Document免交互

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

是标准输出的一种替代品,代替了人工的输入方式

语法格式

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

内容1

内容2

内容3

标记

wc -l <<xy102
> 123
> 456
> 789
> xy102
3

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

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

3、结尾的标记后面也不能有空格

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

文件插入 两种方式 tee

[root@test1 opt]# cat <<EOF>>test1.txt
> 123
> 456
> 789
> EOF
[root@test1 opt]# cat test1.txt 
123
456
789
[root@test1 opt]# tee test2.txt <<EOF
> 1
> 2
> 3
> 4
> 5
> 6
> EOF
1
2
3
4
5
6
[root@test1 opt]# cat test2.txt 
1
2
3
4
5
6

引入变量

file="test1.sh"
i=school
cat >$file <<EOF
I am going to $i
EOF
sh 1.sh 
[root@test1 opt]# cat test1.sh 
I am going to school

整体变量赋值

 vim 2.sh 

var="Great! I am going to school"
myvar=$(cat <<EOF
this is monday
$var
EOF
)
echo $myvar
运行脚本
sh 2.sh 
this is monday Great! I am going to school

关闭免交互

 vim 2.sh 

var="Great! I am going to school"
myvar=$(cat <<'EOF'
this is monday
$var
EOF
)
echo $myvar
sh 2.sh 
this is monday $var

Expect实现免交互

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

rpm -q tcl expect

wh

转义符

\n:换行

\r:回车

\t:相当于tab键

\b:表示退格,删除

先安装软件

先赋权文件, ./才可以执行

./passed.sh

!/ure/bin/expect

声明解释器

set timeout 5

set设置timeout超时时间 默认是十秒设置超时时间五秒

set 也可以作为设置变量

spawn

后面需要执行的命令,开启会话过程,并跟踪后续的免交互信息

expect “新的密码:”

捕获需要执行的命令行,只要能够捕获即可,不需要完整的,可以用*代表所有

send “abc123\r”

输入指令代码

expect “重新输入新的密码:”

send “abc123\r”

结束语只能写一个

expect eof

交互指令结束后,会退回原用户,切换之前的用户

interact

留在当前用户

#!/usr/bin/expect

# 设置超时时间为5秒
set timeout 5
# 执行更改用户dn的密码命令
spawn passwd dn
# 期待 "新的 密码:" 提示
expect "新的 密码:"
# 输入新密码(假设密码是 "abc123")
send "abc123\r"
# 期待 "重新输入新的 密码:" 提示
expect "重新输入新的 密码:"
# 再次输入新密码
send "abc123\r"
# 期待命令结束
expect eof

赋权
chmod 777 test1.sh 
执行
 ./test1.sh 
spawn passwd dn
更改用户 dn 的密码 。
新的 密码:
无效的密码: 密码少于 7 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新

切换用户

设置超时时间

sed_user “ok”

sed_user = echo 打印指定内容

在这里插入图片描述

#!/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"
expect eof

对文件进行赋权
chmod 777 su.sh 
[root@test1 opt]# su test1
[test1@test1 opt]$ ./su.sh dn abc123
spawn su - dn
密码:
[dn@test1 ~]$ ok[test1@test1 opt]$ 

嵌入执行模式

在shell当中加入expect,涉及到环境切换的场景不建议使用嵌套模式

ssh su不适合使用嵌入模式

在这里插入图片描述

#!/bin/bash
user=$1
password=$2
useradd $user
/usr/bin/expect <<EOF
spawn passwd $user
expect "新的"
send "password\r"
expect "重新"
send "password\r"
expect eof
EOF
 sh qiantao.sh mmm 123
spawn passwd mmm
更改用户 mmm 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 它基于字典单词
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

ssh免密登录

连接固定主机

1、设置变量

在这里插入图片描述

连接主机

在这里插入图片描述

免交互实现硬盘分区

分完区

第一步要格式化

第二步实现挂载,手动挂载

在分区创建文件 写入“学习真好” 打印结果

简单的操作流程

#!/bin/bash

/usr/bin/expect <<EOF
#设置分区
spawn fdisk /dev/sdd
expect "输入 m 获取帮助"
send "n\r"
expect "(default p): "
send "\r"
expect "(1-4,默认 1):"
send "\r"
expect "(2048-41943039,默认为 2048):" 
send "\r"
expect "(2048-41943039,默认为 41943039):" 
send "\r"
expect "输入 m 获取帮助"
send "w\r"

expect eof
EOF
#刷新
partprobe
#创建文件系统
mkfs.xfs -f /dev/sdd1
#创建目录
mkdir /opt/test4
#设置挂载点
mount /dev/sdd1 /opt/test4
echo "学习真好" > /opt/test4/test2.txt
cat /opt/test4/test2.txt

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值