免费注册 查看新帖 |

Chinaunix

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

[系统管理] shell的函数里嵌入的expect语句,如何获得argv参数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-15 22:19 |只看该作者 |倒序浏览
我在shell的函数里嵌入了expect语句,如下
mo_tel()
{
expect -c "
set timeout 15
spawn telnet $1

expect \"ogin:\"
send \"$2\r\"
expect \"assword:\"
send \"$3\r\"
expect \"$2>\"
send \"$4\r\"
send \"exit\r\"
expect eof"
}

mo_tel IP 用户名 密码 命令1  这样可以正常执行

但是我想脚本里这样调用函数,
mo_tel IP 用户 密码 cmd1
mo_tel IP 用户 密码 cmd1 cmd2
mo_tel IP 用户 密码 cmd1 cmd2 cmd3 cmd4

所以,我想在expect语句里写个for循环之类的来识别我要执行的命令个数 我想到用argv参数来实现,但问题是我不知在shell嵌入的expect语句要怎么做才能获取到argv、argc这些参数?

论坛徽章:
3
丑牛
日期:2014-09-13 18:19:22摩羯座
日期:2014-10-10 17:43:02水瓶座
日期:2014-10-16 01:00:22
2 [报告]
发表于 2014-10-15 23:20 |只看该作者
学生党:飘过~试试加上这样的
set 参数名 [lindex $argv 参数位置]

论坛徽章:
0
3 [报告]
发表于 2014-10-15 23:54 |只看该作者
回复 2# 李满满

简单地写了个shell来测试,貌似不行
Administrator ~$ cat chnew.sh
#!/bin/bash

abc()
{
expect -c "

set na [lindex $argv 1]
puts $na

expect eof"
}

abc aaa bbb ccc

Administrator ~$ sh chnew.sh
wrong # args: should be "puts ?-nonewline? ?channelId? string"
    while executing
"puts "


下面这个用expect做解释,可以
Administrator ~$ cat exnew.sh
#!/usr/bin/expect


set na [lindex $argv 1]

puts $na
Administrator ~$
Administrator ~$ chmod +x exnew.sh
Administrator ~$ ./exnew.sh aaa bb ccc
bb


是否说明shell函数的位置参数,不能作为expect的参数引用(不能通过argv来引用?)

论坛徽章:
3
丑牛
日期:2014-09-13 18:19:22摩羯座
日期:2014-10-10 17:43:02水瓶座
日期:2014-10-16 01:00:22
4 [报告]
发表于 2014-10-16 00:59 |只看该作者
回复 3# noveminfo

一般我们会把expect和调用脚本写在不同的文件,专门写一个主文件去调用expect脚本随便传参,你试下,不行明天给你范例
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP