Shell 프로 그래 밍 의 Expect 대화 면제 문 상세 설명

3712 단어 Linuxcentos7Shell
기대 개술
expect 는 tcl 기반 에 세 워 진위의 도구 인 Expect 는 자동화 제어 와 테스트 를 하 는 도구 입 니 다.주로 셸 스 크 립 트 에서 대화 할 수 없 는 문 제 를 해결 합 니 다.대규모 Liux 운영 에 도움 이 됩 니 다.Liux 운영 과 개발 에서 우 리 는 원 격 로그 인 서버 를 조작 해 야 합 니 다. 로그 인 과정 은 상호작용 과정 이 고 (yes/no) password 등 정 보 를 입력 해 야 할 수도 있 습 니 다.이 입력 을 모 의 하기 위해 서 는 Expect 스 크 립 트 를 사용 할 수 있 습 니 다.
예상 설치
yum install expect -y
기본 명령
send:
사용자 의 입력 을 모 의 하기 위해 프로 세 스에 문자열 을 보 냅 니 다.이 명령 은 자동 으로 줄 을 바 꿀 수 없습니다. 일반적으로\r (리 턴) 를 추가 해 야 합 니 다.
expect:
expect 의 내부 명령 입 니 다. 마지막 출력 결과 에 지정 한 문자열 이 포함 되 어 있 는 지 판단 하고 있 으 면 바로 돌아 갑 니 다. 그렇지 않 으 면 시간 초과 후 돌아 갑 니 다.spawn 에서 시작 하 는 프로 세 스 의 출력 만 캡 처 할 수 있 습 니 다.
spawn:
프로 세 스 를 시작 하고 후속 대화 정 보 를 추적 합 니 다.
interact:
실행 이 끝 난 후 상호작용 상 태 를 유지 하고 컨트롤 러 에 제어권 을 맡긴다.
Timeout:
시간 초과 시간 을 지정 하고 기한 이 지나 면 후속 명령 을 계속 수행 합 니 다.단 위 는: 초;timeout - 1 은 시간 을 초과 하지 않 습 니 다.기본적으로 타임 아웃 은 10 초 입 니 다.
exp_ continue:
expect 명령 을 계속 아래로 실행 할 수 있 도록 합 니 다.
send_ user:
에코
$argv 매개 변수 배열:
expect 스 크 립 트 는 bash 에서 전달 하 는 인 자 를 받 아들 일 수 있 습 니 다. [lindex $argv n] 을 사용 하여 얻 을 수 있 습 니 다. n 은 0 부터 각각 첫 번 째 두 번 째, 세 번 째.. 인 자 를 표시 합 니 다.
expect eof:
expect 스 크 립 트 는 interact 나 expect eof 로 끝나 야 합 니 다. 자동화 작업 을 수행 하면 보통 expect eof 로 충분 합 니 다. expect eof 는 종료 표 지 를 기다 리 고 있 습 니 다.spawn 에서 시작 하 는 명령 은 끝 날 때 eof 표 시 를 만 듭 니 다. expect eof 는 이 표 시 를 기다 리 고 있 습 니 다.
기대 문법
단일 분기 문expect "password:" {send "mypassword\r";}
다 분기 모드 문법
expect "aaa" {send "AAA\r"}
expect "aaa" {send "AAA\r"}
expect "aaa" {send "AAA\r"}

send 명령 은 리 턴 기능 이 없 으 며, 일반적으로\r 또는.
expect{
"aaa"{send"AAA\r"}
"bbb"{send"BBB\r"}
"ccc"{send"CCC\r"}
}

모든 것 이 일치 하면 하 드 send 문 구 를 실행 한 후 이 expect 문 구 를 종료 합 니 다.
expect {
"aaa" {send "AAA\r";exp_continue}
"bbb" {send "BBB\r";exp_continue}
"ccc" {send "CCC\r"}
}

exp_contine 은 뒤의 매 칭 을 계속 하 는 것 을 표시 합 니 다. aaa 와 일치 하면 send 문 구 를 실행 한 후에 도 계속 아래로 bb 와 일치 해 야 합 니 다.
예상 실행 방식
직접 실행:
실행 스 크 립 트 를 통 해 직접 대화 없 이 ssh 로그 인
[root@localhost opt]# vim demo01.sh 

#!/usr/bin/expect                                         //Expect二进制文件的路径
set timeout 20                                            //超时时间20,单位:秒
log_file test.log                                         //日志文件
log_user 1                                                //日志用户个数
set hostname [lindex $argv 0]
set password [lindex $argv 1]              //定义变量,通过参数将内容传入,类似于位置变量
spawn ssh root@$hostname              //追踪命令
expect {
                "Connection refused" exit           //捕捉服务被拒绝信息,并执行exit退出免交互
                "service not konwn" exit             //捕捉未知服务或连接地址错误的信息,并执行exit退出免交互
        "(yes/no)"                                     //捕捉询问是否连接的的信息
        {send "yes\r";exp_continue}     //输入"yes",回车,并继续进行匹配
        "*password"                                //捕捉密码输入的信息
        {send "$password\r"}                //通过变量输入密码,回车,不继续匹配。
}
interact                                               //保持交互状态,把控制权交给控制台

끼 워 넣 기 실행:
스 크 립 트 를 통 해 사용 자 를 만 들 고 사용자 에 게 비밀 번 호 를 설정 하지 않 습 니 다.
[root@localhost opt]# vim demo02.sh

#!/bin/bash
user=$1                                                                          //定义位置变量$1为user
password=$2                                                                //定义位置变量$2为password
useradd $user                                                              //添加用户
/usr/bin/expect <

좋은 웹페이지 즐겨찾기