交互式的shell脚本:expect

以前写shell脚本,都是不包含交互能力的shell。比如说下面这个数据库备份脚本:

#!/bin/bash
date_str=`date +%Y%m%d`
date_7_days_ago=`date -d '-7 day' +%Y%m%d`
mysqldump -h localhost -u test-p123456 db_test | zip > /usr/local/backup_db/db_test_$date_str.zip
cd /usr/local/backup_db/
rm -f db_test_$date_7_days_ago.zip

最近遇到个问题,比如说要用脚本定时传输备份文件到另外一台服务器。我这里用的是scp命令,这时就引出一个问题,scp命令是需要交互,输入密码的。

查了下,发现可以用expect来写shell。

首先,先安装expect。

yum install expect

脚本如下:

#!/usr/bin/expect
set timeout 30
spawn scp /usr/local/backup_db/db_test_201408.zip [email protected]:/usr/local/tmp
expect "password:"
send "123456\r"
interact
exit

对了,最后有点要注意的。假设脚本名为scp_file.sh,则执行脚本的命令为:

expect scp_file.sh

而不是: sh scp_file.sh

你可能感兴趣的:(shell,scp,交互)