expect指令碼
1. expect簡介
expect是乙個用來處理互動的命令。借助expect,我們可以將互動過程寫在乙個指令碼上,使之自動化完成。
expect(自動應答) 基於tcl(tool command language)語言演變而來
expect中最關鍵的四個命令是:
send:用於向程序傳送字串
expect:從程序接收字串
spawn:啟動新的程序
interact:允許使用者互動
2. 安裝expect
# yum install expect -y
檢視expect資訊
[root@web1 sed]# rpm -qi expect
name : expect relocations: (not relocatable)
version : 5.44.1.15 vendor: centos
release : 5.el6_4 build date: mon 04 nov 2013 05:05:44 pm cst
install date: sun 21 aug 2016 11:48:49 pm cst build host: c6b9.bsys.dev.centos.org
group : development/languages source rpm: expect-5.44.1.15-5.el6_4.src.rpm
size : 566637 license: public domain
signature : rsa/sha1, mon 04 nov 2013 07:53:54 pm cst, key id 0946fca2c105b9de
packager : centos buildsystem
this package contains expect and some scripts that use it.
任何有互動性的操作,都可以用expect來做
3. expect使用詳解
#!/bin/bash
expect &1 --/dev/null 代表把標準輸出重定向輸出到空洞,2>&1代表把出錯輸出也定向到標準輸出。
spawn passwd $1 --產生passwd $1這個命令
expect "password:" --當停在rd:結尾這個識別符號時
send "456\r" --我就把456傳給它
expect "password:" --當再次停在rd:結尾這個識別符號時
send "456\r" --我就再次把456傳給它
expect eof --表示expect結束
eof# sh 1.expect test --執行方法,因為指令碼裡寫的是$1,所以後面接你要修改密碼的使用者名稱
遠端ssh
#!/bin/bash
sed -i '/^'$1'/d' /root/.ssh/known_hosts
expect << eof > /dev/null 2>&1
spawn ssh $1
expect "no)?"
send "yes\r"
expect "password:"
send "123456\r"
expect "]#"
send "mkdir /root/desktop/aa\r"
send "touch /root/desktop/aa/$1\n"
send "exit\n"
expect eof
eof假設管理的機器有n臺,密碼也各不相同(沒有ssh等效性),現在需要在每個機器上都建立乙個檔案
# cat ip_user_passwd.txt --這個檔案裡包含你所有管理機器的ip,使用者及其對應的密碼
10.1.1.63 root oracle
10.1.1.77 root 1234
10.1.1.73 user1 123456
10.1.1.85 root 54321
......
# cat 6.expect
#!/bin/bash
cat ip_user_passwd.txt |while read ip user password
dosed -i '/^'$ip'/d' /root/.ssh/known_hosts
expect spawn ssh $ip -l $user
expect ")?"
send "yes\r"
expect "rd:"
send "$password\n"
expect "]#"
send "touch /tmp/123\n" --這裡可以修改你每次要在這些機器上做的命令
send "exit\n"
expect eof
eofdone
expect自動應答的工具
eof 輸入重定向 這種適用於出現的問題個數已知 expect是建立在tcl基礎上的乙個工具,它用來自動化完成一些需要互動的任務。系統中要先安裝expect 和 tcl expect 的四個命令 直譯器為 usr bin expect 例子 bin bash read p what s your n...
自動應答API memo
android關閉麥克風api public void setmicrophonemute boolean on sets the microphone mute on or off.parameters onset true to mute the microphone false to turn...
shell指令碼之expect自動應答語言
在指令碼中寫入與系統互動時可能出現的詢問語句,然後將要回答的答案也寫入指令碼中,實現自問自答,從而實現指令碼的人機互動。expect 是自動應答命令用於互動式命令的自動執行 spawn 是 expect 中的監控程式,其執行後會監控命令提出的互動問題 send傳送問題答案給互動命令 r 表示回車 e...