Shell 编程之免交互

 一、Here Document

语法格式:
命令 << 标记
......
......
 标记

1.用wc -l的命令统计输入的文字的行数

[root@localhost ~]# wc -l <<EOF
> aaa
> bbb
> ccc
> EOF
3

 备注:
显示行数。

2.整体赋值给变量,通过echo打印出来

[root@localhost ~]# vim aaa.sh
a="很高兴认识你"
b=$(cat <<EOF
你好,
$a
EOF
)
echo $b
[root@localhost ~]# bash ccc.sh
你好, 很高兴认识你

备注:
你好,   $a     EOF在使用 tab键时,b=$(cat <<EOF要改写成b=$(cat <<-EOF

3. 添加注释符 #,多行注释

[root@localhost ~]# vim ddd.sh
echo 11
:<<EOF
echo 22
echo 33
EOF
echo 44
​​​​​​​[root@localhost ~]# bash ddd.sh   
11
44

 备注:
:表示什么命令都不做的空命令

二、expect

1.基础命令

expect 建立在TCL语言基础之上的一个工具,需要一些交互任务自动完成,解决交互的相关问题。

(1)expect  

  • 判断输出结果中是否包含指定的字符串,如果有则立即返回,否则就等待超时时间后返回
  • 只能捕捉由spawn启动的进程的输出
  • 用于接收命令执行后的输出,然后和期望的字符串匹配

(2) send  发送字符串,用户输入,无法自动换行,+r回车
(3) spawn 开起会话,后面跟系统命令,启动进程
(4) expect  eof 结束符  等待执行结束
(5) interact  结束交互,但依旧停留在目标终端,不会返回原始终端。

2.ssh无交互登录到远程服务器

[root@localhost ~]# yum -y install expect
[root@localhost ~]# vim eee.sh
#!/usr/bin/expect
spawn ssh 192.168.10.102
expect {
"*yes/no" {send "yes\r";exp_continue}
"password:" {send "aptech\r";}
}
expect "#"
interact
[root@localhost ~]# chmod +x eee.sh
[root@localhost ~]# ./eee.sh

备注:

  • #!/usr/bin/expect    这里需要用expect自己的解释器,注意不要写成bash否则无法识别。
  • spawn ssh root@192.168.100.102   开启一个程序,这个程序是ssh远程登录。
  • "*yes/no" {send "yes\r"; exp_continue}   当提示符中出现yes/no的时候,自动发送一个yes字符。
  • "password: " { send "aptech\r"; }    当出现password的时候,就会向程序发送密码,默认是不换行的,所以需要\r回车换行,多个条件需要大括号括起来。
  • interact    需要继续交互,不要用expect eof,否则会直接退出远程服务器。
  • 3. 对方服务器上进行一下操作后再退出可执行以下脚本

[root@localhost ~]# vim eee.sh
#!/usr/bin/expect
spawn ssh 192.168.10.102
expect {
"*yes/no" {send "yes\r";exp_continue}
"password:" {send "aptech\r";}
}
expect "#"
send "ifconfig ens33\r"
send "exit\r"
expect eof
[root@localhost ~]# chmod +x eee.sh
[root@localhost ~]# ./eee.sh

备注:

expect "#"                   //当捕获到#的时候
send "ls \r"                 //执行ls命令
send "ifconfig ens33 \r"     //执行ifconfig ens33命令
send "exit\r"                //执行完exit退出登陆
expect eof                   //不需要进行交互了,意味着结束expect程序

4. 创建用户并设置密码

[root@localhost ~]# vim fff.sh
#!/bin/bash
user=$1
password=$2
useradd $user
expect<<EOF
spawn passwd $user
epect "New password:"
send "${password}\r"

expect "Retry new password:"
send "${password}\r"
expect eof 
EOF
[root@localhost ~]# cat /etc/shadow

5.  ssh远程自动登录

102主机服务器

​​​​​​​[root@localhost ~]# yum -y install vsftpd
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start vsftpd

101客户端

#!/usr/bin/expect
spawn ftp 192.168.10.102
expect "Name"
send "ftp\r"
expect "Password:"
send "\r"
expect "ftp>"
send "exit\r"
expect eof
[root@localhost ~]# chmod +x hhh.sh 
[root@localhost ~]# ./hhh.sh 

相关推荐

  1. Shell 编程

    2024-06-05 19:36:41       31 阅读
  2. Shell编程

    2024-06-05 19:36:41       32 阅读
  3. Shell 编程

    2024-06-05 19:36:41       25 阅读
  4. Shell编程

    2024-06-05 19:36:41       33 阅读
  5. Shell

    2024-06-05 19:36:41       26 阅读
  6. 小阿轩yx-Shell 编程

    2024-06-05 19:36:41       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-05 19:36:41       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-05 19:36:41       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-05 19:36:41       82 阅读
  4. Python语言-面向对象

    2024-06-05 19:36:41       91 阅读

热门阅读

  1. SQL注入的危害和原理

    2024-06-05 19:36:41       31 阅读
  2. 达梦数据库的锁介绍

    2024-06-05 19:36:41       31 阅读
  3. Python中的None用法深度解析

    2024-06-05 19:36:41       32 阅读
  4. C++的算法:贪心算法

    2024-06-05 19:36:41       27 阅读
  5. mysql中的函数

    2024-06-05 19:36:41       30 阅读
  6. 前端-Vue组件key的作用

    2024-06-05 19:36:41       27 阅读
  7. Go 延迟调用机制

    2024-06-05 19:36:41       28 阅读
  8. Python实现连连看4

    2024-06-05 19:36:41       28 阅读
  9. 【golang】go语言读取Excel表格中的数据

    2024-06-05 19:36:41       25 阅读
  10. Go GORM中的迁移系统,实现自动迁移与手动迁移

    2024-06-05 19:36:41       28 阅读
  11. 深度学习-离线下载链接

    2024-06-05 19:36:41       30 阅读