首先需要安装expect
# rpm -ihv expect-5.43.0-8.el5.i386.rpm
# rpm -ihv expect-devel-5.43.0-8.el5.i386.rpm
例子:
#! /usr/bin/expect -f
spawn scp 1 koven@192.168.0.2:
expect "*password:"
send "your password\r"
expect eof
下面是我在工作中用于公司测试环境的数据库逻辑备份脚本
dbback.sh
#!/bin/bash
cd /home/oracle/expdtimemv=$(date +%Y%m%d)
export timemv
echo $timemv >/home/oracle/expd/script/cn.conf
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH
export ORACLE_SID=hnkfkpi
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
expdp ctuni_pub/ctunipub directory=dump_dir dumpfile=hnkpipub_%U.dmp schemas=ctuni_pub parallel=4 logfile=ctuni_hnkpipub.log
rm -rf *.log
tar -zcvf hndbback.$(echo $timemv).tar.gz *.dmp
rm -rf *.dmp
/home/oracle/expd/script/mv_file.sh
panduan=$(echo $?)
if [ $panduan -eq 0 ];then
echo "mv_file finish at `date`">>/home/oracle/expd/log/mv.log
rm -rf hndbback*.tar.gz
else
echo "mv_file failed at `date`">>/home/oracle/expd/log/mv.log
fi
dbback脚本调用 mv_file.sh 移动导出后打包好的逻辑备文件
mv_file.sh
#!/usr/bin/expect
set password "oracle"
set timemv [exec cat /home/oracle/expd/script/cn.conf]
set hnb1 "hndbback.$timemv.tar.gz"
set hnb "/home/oracle/expd/hndbback.$timemv.tar.gz"
spawn scp $hnb oracle@10.95.3.112:/tcdata1/dbback/$hnb1
expect {
"(yes/no)?"
{
send "yes\n"
expect "*password*" { send "$password\n"}
}
"*password*"
{
send "$password\n"
}
}
expect "100%"
expect eof
cn.conf
作为传递变量的媒介将时间变量在两个脚本中传递
希望对大家有所帮助