Chinaunix

标题: shell中调用expect传值问题 [打印本页]

作者: 水底游    时间: 2013-08-28 10:36
标题: shell中调用expect传值问题
  1. [root@localhost expect]# cat f.sh
  2. #!/bin/sh
  3. while read i j
  4. do
  5. expect <<EOF
  6. set ip $i
  7. set password $j
  8. set timeout 3
  9. spawn ssh root@$ip
  10. expect {
  11. "*yes/no" {send "yes\r";exp_continue}
  12. "*Password:" {send "$password\r"}
  13. }
  14. expect eof
  15. EOF
  16. done <ip.txt
复制代码
执行后报错
  1. [root@localhost expect]# ./f.sh
  2. spawn ssh root@
  3. ssh: Could not resolve hostname : Name or service not known
  4. expect: spawn id exp4 not open
  5.     while executing
复制代码
预计是$i,$j的值没有传入进去

这个传值要怎么搞?

如果用单个文件直接写明ip的话是可以正常运行的
  1. [root@localhost expect]# cat e.exp
  2. #!/usr/bin/expect -f
  3. set ip 192.168.1.212
  4. set password qwe123
  5. set timeout 10
  6. spawn ssh root@$ip
  7. expect {
  8. "*yes/no" {send "yes\r";exp_continue}
  9. "*Password:" {send "$password\r"}
  10. }
  11. interact
  12. [root@localhost expect]#
复制代码

作者: guogang225    时间: 2013-08-28 10:51
本帖最后由 guogang225 于 2013-08-28 10:59 编辑

回复 1# 水底游
  1. #!/bin/sh
  2. while read ip password
  3. do
  4. expect <<EOF
  5. set timeout 3
  6. spawn ssh root@"$ip"
  7. expect {
  8. "*yes/no" {send "yes\r";exp_continue}
  9. "*Password:" {send "$password\r"}
  10. }
  11. expect eof
  12. EOF
  13. done <ip.txt
复制代码

作者: 水底游    时间: 2013-08-28 11:08
我的脚本那么写,为什么不行的?参数转了两次不行还是什么原因的?
回复 2# guogang225


   
作者: wxq1090691643    时间: 2013-08-28 14:10
本帖最后由 wxq1090691643 于 2013-08-28 14:12 编辑
  1. #!/bin/sh
  2. while read ip passwd
  3. do
  4. expect <<EOF
  5. set timeout 3
  6. spawn ssh root@$ip
  7. expect {
  8. "yes/no" { send "yes\r";exp_continue }
  9. "password:" { send "$passwd\r" }
  10. }
  11. expect eof
  12. EOF
  13. done <ip.txt
复制代码

作者: guogang225    时间: 2013-08-28 17:46
回复 3# 水底游


    set变量在here document里不生效




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2