Expect是基於Tcl語言的一種腳本語言,其實無論是交互還是非交互的應用場合,Expect都可以大顯身手,但是對於交互式的特定場合,還非Except莫屬。
第1步:使用root用戶登錄
第2步:復制安裝文件
在合適的位置創建一個文件夾,例如soft
修改文件夾讀寫權限
chmod 777 soft
第3步:解壓安裝包
[我已經上傳了expect-5.43.0.tar.gz 和 tcl8.4.11-src.tar.gz 在本文后面可以點擊下載]
把expect-5.43.0.tar.gz和tcl8.4.11-src.tar.gz復制到soft目錄下,
解壓tcl8.4.11-src.tar.gz
tar –xvf tcl8.4.11-src.tar.gz
解壓后將創建tcl8.4.11 文件夾
解壓expect-5.43.0.tar.gz
tar –xvf expect-5.43.0.tar.gz
解壓后將創建expect-5.43 文件夾
目錄結構如下圖(SSH登錄的截圖)所示:
上圖中可以看出在/soft下有tcl8.4.11和tcl8.4.11 兩個文件夾
第4步:安裝tcl
進入/soft/tcl8.4.11/unix 目錄
a.執行sed -i "s/relid'/relid/" configure
b.執行./configure --prefix=/expect
c.執行make
d.執行make install
e.執行mkdir -p /tools/lib
f.執行cp tclConfig.sh /tools/lib/
g. 將/tools/bin目錄export到環境變量
tclpath=/tools/bin
export tclpath
第5步:安裝Expect
進入/soft/expect-5.43目錄
執行./configure --prefix=/tools --with-tcl=/tools/lib --with-x=no
如果最后一行提示:
configure: error: Can't find Tcl private headers
需要添加一個頭文件目錄參數
--with-tclinclude=../tcl8.4.11/generic,即
./configure --prefix=/tools --with-tcl=/tools/lib --with-x=no --with-tclinclude=../tcl8.4.11/generic
../tcl8.4.11/generic 就是tcl解壓安裝后的路徑,一定確保該路徑存在
執行make
執行make install
編譯完成后會生在/tools/bin內生成expect命令
執行/tools/bin/expect出現 expect1.1>提示符說明expect安裝成功.
第6步:創建一個符號鏈接
ln -s /tools/bin/expect /usr/bin/expect
查看符號連接
ls -l /usr/bin/expect
lrwxrwxrwx 1 root root 17 06-09 11:38 /usr/bin/expect -> /tools/bin/expect
這個符號鏈接將在編寫expect腳本文件時用到,例如在expect文件頭部會指定用於執行該腳本的shell
#!/usr/bin/expect
...
...
第1步:使用root用戶登錄
第2步:復制安裝文件
在合適的位置創建一個文件夾,例如soft
修改文件夾讀寫權限
chmod 777 soft
第3步:解壓安裝包
[我已經上傳了expect-5.43.0.tar.gz 和 tcl8.4.11-src.tar.gz 在本文后面可以點擊下載]
把expect-5.43.0.tar.gz和tcl8.4.11-src.tar.gz復制到soft目錄下,
解壓tcl8.4.11-src.tar.gz
tar –xvf tcl8.4.11-src.tar.gz
解壓后將創建tcl8.4.11 文件夾
解壓expect-5.43.0.tar.gz
tar –xvf expect-5.43.0.tar.gz
解壓后將創建expect-5.43 文件夾
目錄結構如下圖(SSH登錄的截圖)所示:

上圖中可以看出在/soft下有tcl8.4.11和tcl8.4.11 兩個文件夾
第4步:安裝tcl
進入/soft/tcl8.4.11/unix 目錄
a.執行sed -i "s/relid'/relid/" configure
b.執行./configure --prefix=/expect
c.執行make
d.執行make install
e.執行mkdir -p /tools/lib
f.執行cp tclConfig.sh /tools/lib/
g. 將/tools/bin目錄export到環境變量
tclpath=/tools/bin
export tclpath
第5步:安裝Expect
進入/soft/expect-5.43目錄
執行./configure --prefix=/tools --with-tcl=/tools/lib --with-x=no
如果最后一行提示:
configure: error: Can't find Tcl private headers
需要添加一個頭文件目錄參數
--with-tclinclude=../tcl8.4.11/generic,即
./configure --prefix=/tools --with-tcl=/tools/lib --with-x=no --with-tclinclude=../tcl8.4.11/generic
../tcl8.4.11/generic 就是tcl解壓安裝后的路徑,一定確保該路徑存在
執行make
執行make install
編譯完成后會生在/tools/bin內生成expect命令
執行/tools/bin/expect出現 expect1.1>提示符說明expect安裝成功.
第6步:創建一個符號鏈接
ln -s /tools/bin/expect /usr/bin/expect
查看符號連接
ls -l /usr/bin/expect
lrwxrwxrwx 1 root root 17 06-09 11:38 /usr/bin/expect -> /tools/bin/expect
這個符號鏈接將在編寫expect腳本文件時用到,例如在expect文件頭部會指定用於執行該腳本的shell
#!/usr/bin/expect
...
...
----------------------
1.下載expect和tcl
下載地址:http://download.csdn.net/download/tobyaries/5754943
2.安裝expect
tar -zxvf tcl8.4.11-src.tar.gz
tar -zxvf expect-5.43.0.tar.gz
cd tcl8.4.11/unix
./configure
make && make install
cd expect-5.43
./configure --with-tcl=/usr/local/lib/ --with-tclinclude=/data/software/tcl8.4.11
make && make install
3.腳本測試
- #!/usr/bin/expect -f
- set timeout 30
- set name [lindex $argv 0]
- set pw [lindex $argv 1]
- log_user 0
- spawn passwd $name
- for {set i 1} {$i < 3} {incr i} {
- expect "*password:" {send "$pw\r"}
- }
- expect "*successfully"
- send_user "Password updated successfully\n"
- expect eof
[解析]
很簡單的程序,首先把第一個參數賦值給變量name作為用戶名,把第二個參數賦值給pw作為密碼。然后關閉標准輸出,就是類似shell的 "> /dev/null",然后spawn開啟子進程運行passwd程序,因為會重復輸入2次密碼,所以這里我們用到了TCL語法的for循環,執行2次密碼輸入。最后匹配到successfully字樣的就輸出修改成功,然后退出腳本。