免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1924 | 回复: 2
打印 上一主题 下一主题

[Linux] 求高人指点:shell编程_spawn传参数的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-01 15:14 |只看该作者 |倒序浏览
本帖最后由 imvega 于 2013-04-02 08:49 编辑

写了一个脚本,读取file.txt上服务器的IP和用户名密码,实现远程备份,但执行时会报错,报错信息如下:
==========================================
syntax error in expression "read"
    while executing
"while read LINE"
==========================================

bash -x调试时,显示如下:
==========================================
+ bash -x remote_backup_dns.sh
+ cd /home/tools/conf_backup/
+ set date '[exec' date -d yesterday '+%F]'
+ read LINE
++ echo 192.168.0.1 root 123456 test_01
++ awk '{print $1}'
+ set SERVER 192.168.0.1
++ echo 192.168.0.1 root 123456 test_01
++ awk '{print $2}'
+ set USER root
++ echo 192.168.0.1 root 123456 test_01
++ awk '{print $3}'
+ set PASSWORD 123456
++ echo 192.168.0.1 root 123456 test_01
++ awk '{print $4}'
+ set DIRECT test_01
+ spawn scp 'root@:/abc/abc**' /abc/
test.sh: line **: spawn: command not found
+ set timeout 300
+ expect 'root@'\''s password:'
couldn't read file "root@'s password:": no such file or directory
+ set timeout 300
+ send '\r'
test.sh: line **: send: command not found
+ send 'exit\r'
test.sh: line **: send: command not found
+ read LINE
+ expect eof
couldn't read file "eof": no such file or directory
==========================================

bash -x结果表明,SERVER、USER、PASSWORD、DIRECT的参数的值已经是正确的,
但是,spawd语句显示,没有将相应的参数的值传入。

不知是什么原因?在线等高人指点。

原脚本如下:
===========================================
#!/usr/bin/expect -f   
   
cd /home/tools/conf_backup/

set DATE [exec date "+%Y_%m_%d"]

while read LINE;

do

set SERVER `echo $LINE | awk '{print $1}'`
set USER `echo $LINE | awk '{print $2}'`
set PASSWORD `echo $LINE | awk '{print $3}'`
set DIRECT `echo $LINE | awk '{print $4}'`

spawn scp $USER@$SERVER:/abc/abc*$date* /abc/$DIRECT

set timeout 300

expect "$USER@$SERVER's password:"
  
set timeout 300

send "$PASSWORD\r"

send "exit\r"

done < file.txt

expect eof
============================================

论坛徽章:
0
2 [报告]
发表于 2013-04-02 08:52 |只看该作者
自己顶顶,盼回复

论坛徽章:
0
3 [报告]
发表于 2013-04-21 18:49 |只看该作者
imvega 发表于 2013-04-01 15:14
写了一个脚本,读取file.txt上服务器的IP和用户名密码,实现远程备份,但执行时会报错,报错信息如下:
== ...



expect can't use
"while read LINE " , to read file
it should
open file
gets $fd file


you can use shell call expect

while read LINE
do
SERVER=`echo $LINE | awk '{print $1}'`
USER=`echo $LINE | awk '{print $2}'`
PASSWORD=`echo $LINE | awk '{print $3}'`
DIRECT=`echo $LINE | awk '{print $4}'`
print "$SERVER;$USER;$PASSWORD;$DIRECT \n"
a.tcl $SERVER $USER $PASSWORD $DIRECT
done < 3.txt

cat a.tcl
set SERVER [lindex $argv 0]
set USER [lindex $argv 1]
set PASSWORD [lindex $argv 2]
set DIRECT [lindex $argv 3]
puts "line6SERVER;$USER;$PASSWORD;$DIRECT \n"
exit
spawn scp $USER@$SERVER:/abc/abc*$date* /abc/$DIRECT

it will fine
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP