기대 에 힘 입 어 조작 자동 화 를 실현 하 다.

2831 단어
최근 에 시스템 운영 에 관 한 일 을 하고 있 기 때문에 오랫동안 버 렸 던 셸 을 다시 주 웠 습 니 다. 변수 정의, 함수 같은 것 입 니 다.
그 중에서 자주 사용 하 는 작업 은 데이터베이스 내 보 내기, 가 져 오기, 개발 환경 컴 파일 패키지 후 서버 에 파일 을 업로드 하고 서버 에서 정지, 재 시작 등 을 포함한다.이러한 작업 의 특징 은 바로 일반적인, 일정 화 된 것 이기 때문에 하나의 스 크 립 트 를 추출 하여 원 키 로 자동 으로 실행 할 수 있다 (아마도 마이크로 서비스 이념 의 영향 을 받 아 최근 에 무슨 일 을 하 든 자동화 하고 인위적인 요 소 를 없 애 려 고 한다).그러나 여기 서 문제 에 부 딪 혔 습 니 다. 많은 조작 은 인공 적 으로 개입 해 야 합 니 다. 예 를 들 어 scp, ssh, psql, pgdump (이 두 명령 은 PostgreSQL 데이터 베 이 스 를 가 져 와 내 보 내 는 데 사 용 됩 니 다. 다른 유형의 데이터 베이스 도 유사 합 니 다) 모두 password 를 인공 적 으로 입력 해 야 명령 을 계속 수행 할 수 있 습 니 다.이 문 제 를 해결 하면 expect 로 자동 과 상호작용 임 무 를 실현 하여 통신 을 할 수 있 으 며, 사람의 간섭 이 필요 없다.이 를 통 해 대화 과정 을 스 크 립 트 에 써 서 자동화 할 수 있 습 니 다!
expect 홈 페이지 에서 다운로드 하여 설치 할 수 있 습 니 다. 저 는 mac 의 homebrew 방식 을 사용 합 니 다. brew 검색 expect brew search expect brew 설치 expect brew install expect설치 완료 후 expect 의 사용법 을 보십시오. 자주 사용 하 는 명령 은 3 개 입 니 다. expect: 프로 세 스에 서 문자열 send 를 받 습 니 다. 프로 세 스에 문자열 spawn 을 보 내 는 데 사 용 됩 니 다. 새 프로 세 스 를 시작 합 니 다.
다음은 scp 명령 을 자동 으로 실행 하 는 간단 한 예 입 니 다. 파일 scp. exp 를 새로 만 듭 니 다. 내용 은 다음 과 같 습 니 다.
#!/usr/bin/expect
set timeout 10
set host [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set dest_file [lindex $argv 4]
spawn scp $src_file $username@$host:$dest_file
expect {
 "*password:"
 {
 send "$password
" } }

첫 번 째 줄 은 운영 체제 스 크 립 트 의 코드 에 그 셸 을 사용 하여 실행 하 라 는 뜻 입 니 다.\#!뒤에 따 르 는 것 은 expect 의 바 이 너 리 파일 경로 이기 때문에 파일 의 첫 번 째 줄 에 두 어야 합 니 다.
두 번 째 줄 set timeout 은 명령 을 실행 하 는 시간 초과 시간 을 설정 하 는 데 사 용 됩 니 다. 단 위 는 초 입 니 다. - 1 은 시간 초과 가 없 음 을 표시 합 니 다.여기 set 문 구 는 셸 에 변 수 를 설정 한 다 는 뜻 입 니 다.
세 번 째 줄 에서 일곱 번 째 줄 도 변수 값 을 설정 합 니 다. 다른 것 은 변 수 를 먼저 정의 한 다음 에 변수의 값 은 파일 에서 가 져 옵 니 다.expect 스 크 립 트 는 bash 에서 전 달 된 인 자 를 받 아들 일 수 있 습 니 다. [lindex $argv n] 으로 얻 을 수 있 습 니 다. n 은 0 부터 각각 첫 번 째, 두 번 째, 세 번 째... 인 자 를 표시 합 니 다.
여덟 번 째 줄 의 spawn 은 expect 의 내부 명령 입 니 다. 여 기 는 scp 의 실행 프로 세 스에 케이스 를 추가 하여 상호작용 명령 을 전달 합 니 다.
9 줄 의 expect 도 expect 의 내부 명령 입 니 다. 뒤에 연 결 된 큰 괄호 에 포 함 된 구문 블록 입 니 다. 그 중에서 'password:' 는 8 줄 의 spawn 이 실 행 된 출력 결과 에 password: 로 끝 나 는 문자열 이 포함 되 어 있 는 지 여 부 를 판단 하 는 뜻 입 니 다. 앞 에 있 는 것 은 정규 표현 식 으로 임의의 문자열 과 일치 하 는 지 를 표시 합 니 다.있 으 면 바로 돌아 갑 니 다. 그렇지 않 으 면 일정 시간 을 기 다 렸 다가 돌아 갑 니 다. 여기 서 기다 리 는 시간 은 앞에서 설정 한 10 초 입 니 다.
12 줄 의 send 역시 내부 명령 입 니 다. 상호작용 동작 을 수행 하 는 것 은 인공 적 으로 비밀 번 호 를 입력 하 는 것 과 같 습 니 다. 비밀 번 호 는 위 에서 정의 한 변수 password, 즉 파일 이 실 행 될 때의 세 번 째 매개 변수의 값 입 니 다.
마지막 으로 이 파일 을 저장 하고 실행 권한 을 부여 합 니 다. chmod +x scp.exp이렇게 실행 ./scp.expect 하면 파일 업로드 기능 을 자동 으로 실행 할 수 있 으 며, 인공 적 으로 비밀 번 호 를 입력 할 필요 가 없다.
이 를 통 해 인공 개입 이 필요 한 명령 작업 을 셸 스 크 립 트 에 삽입 하여 명령 작업 의 자동 화 를 실현 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기