Java教程

shell脚本免交互

本文主要是介绍shell脚本免交互,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • 一、Here Document
    • 概述
    • 实例
  • 二、expect
    • 一、概述
    • 二、经典案列ssh远程登录

一、Here Document

概述

1、使用I/O重定向的方式将命令列表提供给交互式程序
2、标准输入的一种替代品
3、语法格式

命令 <<标记符
……
……
标记符

注意事项:
1、标记可以使用任意合法字符
2、结尾的标语一定要顶格写,前面不能有任何字符
3、结尾的标记后面也不能有任何字符(包括空格)
4、开头标记前后的空格会被省略

实例

修改变量
[root@localhost ~]# read a
10
[root@localhost ~]# echo $a
10
[root@localhost ~]# read a <<EOF
> 220
> EOF
[root@localhost ~]# echo $a
220
变量替换
[root@localhost ~]# a=$(cat<<EOF
> 20
> $a
> EOF
> )
[root@localhost ~]# echo $a
20 220
关闭变量替换
[root@localhost ~]# a=$(cat<<'EOF'
> 30
> $a
> EOF
> )
[root@localhost ~]# echo $a
30 $a

二、expect

一、概述

1、Expect是建立在tcl基础上的一个工具,Expect是用来进行自动化控制和测试的工具。主要解决shell脚本中交互相关的问题。
2、expect是免交互的软件,需要安装。软件名expect。

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

send
1、向进程发送字符串,用于模拟用户的输入
2、该命令不能自动回车换行,一般要加\r (回车),\n(换行)

spawn
启动进程,并跟踪后续交互信息

结束符
1、expect eof:等待执行结束(用于执行自动化任务)
2、interact:执行完成后保持交互状态,把控制权交给控制台

set
1、设置超时时间,过期则继续执行后续指令
2、单位是秒
3、timeout -1表示永不超时
4、默认情况下,timeout是10秒
例:set timeout 20 #登录时超过到少秒退出

exp_ continue
允许expect继续向下执行指令

send_user
回显命令,相当于echo

开启日志文件
log_file test.log #日志记录操作

显示信息
log_user 1 #1为屏幕输出信息,0为不输出信息

接收参数
1、Expect脚本可以接受从bash传递的参数
2、可以使用[lindex $argv n]获得
3、n从0开始,分别表示第一个,第二个,第三个...参数

二、经典案列ssh远程登录

#!/usr/bin/expect
set timeout 10
1og_file ex.1og
1og_user 1

set user [lindex $argv 0]
set ip [lindex $argv 1]
set pass [lindex $argv 2]

spawn ssh $user@$ip

expect {
	“passwd:”
	{ send "$pass\r"; }
}
#interact

expect "#"
send "ls\r"
send "ifconfig ens33\r"
send "exit\r"
expect eof
#!/bin/bash
expect -C “
spawn ssh root@192. 168.238.150
expect \"password:\" { send \"123456\r\" }
expect \"]#\" { send \"1s\r\" }
expect \"]#\" { send \"ifconfig ens33\r\" }
expect \"]#\" { send \"exit\r\" }
expect eof
”
这篇关于shell脚本免交互的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!