Shell 프로 그래 밍 의 Expect 대화 면제
기대 개술
예상 설치
기본 명령 기대
예상 실행 방식
예상 사례
기대 개술
Expect
Expect
는 tcl
을 바탕 으로 하 는 도구 이 고 Expect
자동화 제어 와 테스트 를 하 는 도구 이다.주로 shell
스 크 립 트 에서 상호작용 할 수 없 는 문 제 를 해결 합 니 다.대규모 linux
운영 에 도움 이 된다 linux
운영 과 개발 에서 우 리 는 원 격 로그 인 서버 를 조작 해 야 한다. 로그 인 하 는 과정 은 상호작용 의 과정 으로 입력 yes/no password
등 정 보 를 필요 로 할 수 있다.이 입력 을 모 의 하기 위해 서 Expect
스 크 립 트 예상 설치
마 운 트 CD
로 컬 YUM 소스 만 들 기
설치 명령 실행
yum install expect -y
[root@localhost ~]# yum install expect -y
已加载插件:fastestmirror, langpacks
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/4): extras/7/x86_64/primary_db | 152 kB 00:00:00
(2/4): base/7/x86_64/group_gz | 165 kB 00:00:00
(3/4): updates/7/x86_64/primary_db | 1.9 MB 00:00:01
...//省略部分内容...
正在安装 : 1:tcl-8.5.13-8.el7.x86_64 1/2
正在安装 : expect-5.45-14.el7_1.x86_64 2/2
验证中 : 1:tcl-8.5.13-8.el7.x86_64 1/2
验证中 : expect-5.45-14.el7_1.x86_64 2/2
已安装:
expect.x86_64 0:5.45-14.el7_1
作为依赖被安装:
tcl.x86_64 1:8.5.13-8.el7
完毕!
기본 명령 기대
send: 사용자 의 입력 을 모 의 하 는 데 사용 할 문자열 을 프로 세 스에 보 냅 니 다.
\r
(리 턴) expect
expect
의 내부 명령 은 마지막 출력 결과 에 지정 한 문자열 이 포함 되 어 있 는 지 판단 하고 있 으 면 즉시 되 돌아 갑 니 다. 그렇지 않 으 면 시간 초과 후 돌아 갑 니 다.spawn
시 작 된 프로 세 스 의 출력 만 포착 할 수 있 습 니 다 interact: 실행 완료 후 상호작용 상 태 를 유지 하고 콘 솔 에 제어 권 을 맡 깁 니 다.
Timeout: 시간 초과 시간 을 지정 하고 기한 이 지나 면 후속 명령 을 계속 실행 합 니 다.
timeout -1
은 영원히 시간 을 초과 하지 않 는 다 timeout
는 10
초 exp_ continue
expect
send_ user echo
$argv 매개 변수 배열
Expect
스 크 립 트 는 bash
에서 전달 하 는 매개 변 수 를 받 아들 일 수 있 습 니 다. [lindex $argv n]
를 사용 하여 얻 을 수 있 습 니 다. n
는 0
부터 각각 첫 번 째, 두 번 째, 세 번 째.. 매개 변수 expect 스 크 립 트 는 interact 또는 expect eof 로 끝나 야 합 니 다. 자동화 작업 을 수행 하면 보통 expect eof 로 충분 합 니 다.
expect eof
는 끝 표 지 를 기다 리 고 있다.spawn
시 작 된 명령 이 끝 날 때 eof
표 시 를 만 듭 니 다. expect eof
어 는 이 표 시 를 기다 리 고 있 습 니 다 단일 분기 문법
expect "password:" {send "mypassword\r";}
다 분기 모드 문법
expect "aaa" {send"AAA\r"} //send命令不具备回车换行功能,一般要加\r或
expect "aaa" {send"AAA\r"}
expect "aaa" {send"AAA\r"}
expect {
"aaa" {send "AAA\r"} //只要配置aaa或bbb或ccc中的任何一个,执行相应的send语句后退出该expect语句
"bbb" {send "BBB\r"}
"ccc" {send "CCC\r"}
}
expect {
"aaa" {send "AAA";exp_continue} //exp_continue表示继续后面的匹配,如果匹配了aaa,执行
"bbb" {send "BBB";exp_continue} 完send语句后还要继续向下匹配bbb
"ccc" {send "CCC"}
}
예상 실행 방식
직접 실행
expect
대화 사용 면제 ssh
원 격 으로 다른 서버 에 로그 인 합 니 다. 여기 서 저 는 두 대의 Linux
서버 를 엽 니 다.
[root@localhost ~]# vim demo19.sh //编辑脚本文件
#!/usr/bin/expect //expect二进制文件路径
set timeout 5 //超时时间
log_file tast.log //记录日志文件存放位置
log_user 1 //一个用户
set hostname [lindex $argv 0] //设定第一个位置参数传递并设置变量名hostname
set password [lindex $argv 1] //设定第二个位置参数传递并设置变量名password
spawn ssh root@$hostname //追踪命令
expect { //使用expect命令捕捉条件,设定输入信息,进行免交互设置
"(yes/no)" //设定匹配条件
{send "yes\r";exp_continue} //条件匹配并输入内容,并继续向下匹配
"*password" //设定匹配条件
{send "$password\r"} //条件匹配,引用位置变量输入信息
}
interact //完成后将控制权交给控制台
[root@localhost ~]# chmod +x demo19.sh //给脚本文件添加执行权限
[root@localhost ~]# ./demo19.sh 192.168.144.135 123123 //执行脚本
spawn ssh [email protected]
The authenticity of host '192.168.144.135 (192.168.144.135)' can't be established.
ECDSA key fingerprint is SHA256:B8IsZOFG7FbtVkIK+dMILmo0iA4OEIeVGY0GnnCbXhk.
ECDSA key fingerprint is MD5:c2:d8:09:17:de:6e:ec:07:06:1b:ac:b6:1e:bd:62:09.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.144.135' (ECDSA) to the list of known hosts.
[email protected]'s password:
Last login: Sun Oct 13 23:29:38 2019 from 192.168.144.1 //自动登录服务器
[root@localhost ~]# ifconfig //查看服务器IP地址
ens33: flags=4163 mtu 1500
inet 192.168.144.135 netmask 255.255.255.0 broadcast 192.168.144.255 //成功登录
inet6 fe80::a85a:c203:e2e:3f3c prefixlen 64 scopeid 0x20
inet6 fe80::ad78:663f:1f02:22e4 prefixlen 64 scopeid 0x20
ether 00:0c:29:75:9f:c8 txqueuelen 1000 (Ethernet)
...//省略部分内容...
삽입 실행
[root@localhost ~]# vim demo20.sh //编辑脚本文件
#!/bin/bash
hostname=$1 //设置位置参数变量
password=$2
/usr/bin/expect < mtu 1500
inet 192.168.144.133 netmask 255.255.255.0 broadcast 192.168.144.255
inet6 fe80::a85a:c203:e2e:3f3c prefixlen 64 scopeid 0x20 //成功登出
ether 00:0c:29:5b:d3:a0 txqueuelen 1000 (Ethernet)
RX packets 11058 bytes 855440 (835.3 KiB)
...//省略部分内容...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
✨〰️ ZI 〰️✨ Vim 구문❮ ZI ❯ 🧙♀️ Zsh를 위한 스위스 아미 나이프. 모든 것을 함께 붙일 수 있도록 설계되었습니다. zsh 유형의 파일에 있는 명령에 대한 Vim 구문 정의입니다. 📥 설치 Vim 플러그인으로 로드합니다. 예를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.