今天要開發一個定時任務,然后加入cron列表中。但是有個問題擺在眼前,腳本的執行中需要輸入數據庫密碼(貌似5.1版本以上不允許在-p后直接加密碼,會報錯)
mysql -u root -p << SQL use db; set names utf8; `cat task.sql` SQL
運行上述代碼后,會提示:
Enter password:
expect可以幫助我們完成這件事情:
將上述代碼保存到一個文件中:db.sh
並且編寫如下代碼保存為db.exp:
#!/usr/bin/expect -f spawn db.sh expect "Enter password: " send "password\n" interact
第一行指示了這個腳本要用哪個程序來運行;
第二行是重點,在EXPECT下啟動了一個我們要執行的程序;
第三行也是重點,我們要告訴expect,當什么信息出現時需要expect幫助我們完成交互;
第四行就是出現輸入密碼的提示時,要發送的內容;
第五行的意思是保持交互,不要退出。如果沒有這一句,腳本成功登錄數據庫后,會立即退出。
執行
$expect db.exp
補充:
使用腳本文件的例子--實現自動輸密碼
#!/usr/bin/expect -f
set password 123456
#download
spawn scp root@192.168.1.218:/root/a.wmv /home/yangyz/
set timeout 300
expect "root@192.168.1.218's password:"
set timeout 300
send "$password\r"
set timeout 300
send "exit\r"
ssh實現自動登錄,登陸后sudo至root權限 並停在登錄服務器上
#!/usr/bin/expect -f
set password 123456
spawn ssh tdweb@192.168.99.59
set timeout 300
expect {
"*yes/no" { send "yes\r"; exp_continue}
"*password:" { send "$password\r" }
}
set timeout 300
expect "$*"
send "sudo su\r"
expect "*password for *:"
send "$password\r"
interact
