免费注册 查看新帖 |

Chinaunix

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

写了一个shell调用expect的脚本,expect无法读取shell的变量,如何解决呢?『已解决』 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-23 13:35 |只看该作者 |倒序浏览
程序一:name.sh
#!/bin/bash
for name in root1 root2 root3
     do
     ./login.exp $name
    done

程序二:login.exp
#!/user/bin/expect -f
spawn ssh $name@10.0.0.1
expect "yes/no";
send "yes\r";
expect "password:"
sent "123456";
interact;

执行:
#./name.sh

发错误:
can't read "name":no such variable

当name.sh执行子shell,login.exp时,login.exp无法知道name这个变量。


linuxsor.org yongjian大侠的文章http://www.linuxsir.org/bbs/showthread.php?t=220501
我试了一下,没搞定。特发帖找人帮助谢谢

[ 本帖最后由 firmlyjin 于 2008-12-23 19:09 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-12-23 13:41 |只看该作者
把程序二里的$name换成$1行不行呢?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2008-12-23 13:56 |只看该作者
spawn ssh $argv@10.0.0.1

新手导航里有两篇教程,expect是个完整的编程语言,弄个循环还要借助shell这种不完整编程语言?

论坛徽章:
0
4 [报告]
发表于 2008-12-23 14:39 |只看该作者
这么快就找到了答案了啊,谢谢大师兄。
因为刚学shell,还是菜鸟。

你的两遍文章是这个么
http://bbs.chinaunix.net/viewthread.php?tid=158808

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2008-12-23 14:43 |只看该作者

论坛徽章:
0
6 [报告]
发表于 2008-12-23 16:31 |只看该作者
为什么说shell不好呢?http://bbs.chinaunix.net/thread-1339498-1-1.html
我看我们公司都在用啊

论坛徽章:
0
7 [报告]
发表于 2008-12-24 16:48 |只看该作者

新问题(本来不好意思再问,搞不定啊,还是要请教waver大哥!)

假如需要程序一传递两个参数给程序二,这时候应该怎么处理呢?我简单的修改了一下上面的脚本,请看
程序一:name.sh
#!/bin/bash
server=10.0.0.1
for name in root1 root2 root3
     do
     ./login.exp $name   $server
    done

程序二:login.exp
#!/user/bin/expect -f
set $argv0 [lrange $argv 0 1]
spawn ssh $argv0@$argv1
expect "yes/no";
send "yes\r";
expect "password:"
sent "123456";
interact;

执行:
#./name.sh

发生错误:can't read argv1,no such varable

假如修改程序二
程序二:login.exp
#!/user/bin/expect -f
set $argv0 [lrange $argv 0 1]
spawn ssh $argv@$argv
expect "yes/no";
send "yes\r";
expect "password:"
sent "123456";
interact;
执行后,发生错误:
spwan ssh root 10.0.0.1@ssh root 10.0.0.1
ssh name or serice not kown

论坛徽章:
0
8 [报告]
发表于 2008-12-24 17:10 |只看该作者
解决了,怎么自己就不肯多试一下呢!因为对expect 一点都不了解,所以就产生了迷茫……
解决办法很简单的,只要将程序二改一下
程序二:login.exp
#!/user/bin/expect -f
set name [lindex $argv 0]
set server [lindex $argv 1]
spawn ssh $name@$server
expect "yes/no";
send "yes\r";
expect "password:"
sent "123456";
interact;

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2016-08-11 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
9 [报告]
发表于 2013-03-25 17:27 |只看该作者
回复 8# firmlyjin
把密码也写到shell里为啥不行呢?也当做变量调用

   

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
10 [报告]
发表于 2013-03-25 17:46 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP