expect 是自動化交互式程序(ssh、su、ftp、passwd 等)的利器。本文演示安裝 expect、編寫腳本實現「普通用戶調用 → 自動 su root → 執行卡巴斯基掃毒 → 返回結果」的完整流程。
yum install -y expect
verify_virus#!/usr/bin/expect -f
# 自動 su root 執行掃毒並返回感染狀態
set file [lindex $argv 0]
spawn su -c "/opt/kaspersky/kav4fs/bin/kav4fs-control --scan-file $file" root
expect {
"*Password:" { send "RootPassword\r" }
}
interact
spawn 啟動子進程expect 匹配提示符send 發送密碼含回車 \rinteract 交還控制權(此處用於捕獲輸出)#!/bin/bash
file=$1
if [[ ! -e $file ]]; then
echo "no"; exit 0
fi
infected=$(./verify_virus "$file" | grep "Infected" | grep "0")
if (($?)); then
echo "yes" # 檢測到病毒
else
echo "no" # 無病毒
fi
| 命令 | 說明 |
|---|---|
| spawn cmd | 啟動進程,建立交互通道 |
| expect "pattern" | 等待輸出匹配模式 |
| send "string\r" | 發送字符串(含回車) |
| exp_continue | 匹配後繼續期待下一模式 |
| interact | 將控制權交給用戶/腳本繼續讀取輸出 |
| set timeout 秒 | 設置期待超時(默認 10s) |
| set var [lindex $argv n] | 獲取命令行參數 |
passwd 修改密碼chmod 700,僅擁有者可讀執行掌握 expect,讓一切交互式操作可腳本化、可自動化、可編排。