导航:首页 > 程序命令 > shellexpect命令

shellexpect命令

发布时间:2023-02-13 22:22:11

A. shell脚本中,用expect命令如何实现自动远程操作,折磨我好久了..

既然$无法匹配,我觉得你完全可以单独配置一个环境变量,比如说我登录到服务器后
echo "SCPGOGOGO"
expect捕获到SCPGOGOGO 开始执行scp
expect好久不写了,不知道$?判断怎么写,如果要写我的翻书了。

当判断$?为真,然后执行send "java -jar"。不过我想在仔细思考一下可能会有更好的逻辑。
我不太稀饭expect这种交互写法。

因为有更多简单便捷的方法,不知道你为什么不用。
sshpass ssh密钥 简单点直接用sh操作ssh就可以达到你想要的效果,why死扣expect?,
各种集中式管理软件(puppet,salt,ansible...)都是为了方便远程操作管理的东西why?不用?
本来1小时解决的问题,死扣expect花了好几天,这种把一个问题发展到解决2个问题的做事方法不可取。

B. shell脚本expect自动登录后,怎么又自动退出了

1.安装expect
需要先安装tcl:apt-get install tcl
apt-get install expect
2.expect使用
2.1一个简单的输入密码操作
#!/usr/bin/expect
set timeout 100
set password "123456"
spawn sudo rm -rf zzlogic
expect "root123456"
send "$password\n"
interact
说明:
第一行#!/usr/bin/expect表示使用expect的shell交互模式
set是对变量password赋值
set timeout 100:设置超时时间为100秒,如果要执行的shell命令很长可以设置超时时间长一些。expect超过超时时间没有监测到要找的字符串,则不执行,默认timeout为10秒
spawn在expect下执行shell脚本
expect对通过spawn执行的shell脚本的返回进行判断,是否包含“”中的字段
send:如果expect监测到了包含的字符串,将输入send中的内容,\n相当于回车
interact:退出expect返回终端,可以继续输入,否则将一直在expect不能退出到终端
2.2expect的命令行参数
[lindex $argv n]获得index为n的参数(index从0开始计算)
$argc为命令行参数的个数
[lrange $argv 0 0]表示第一个参数
[lrange $argv 0 3]表示第1到第3个参数
例如scp_service.sh文件,可以./scp_service.sh -rm来执行,这时是赋值了一个参数
set option [lindex $argv 0](获得第一个参数存到变量option中,参数是的index是从0开始计算的)
2.3if...elif...else...
expect支持if语句,
if {条件1} {
条件1执行语句
} elif {条件2} {
条件2执行语句
} else {
其他情况执行语句
}
说明:
1.if的条件用{}来包含条件
2.if和后面的{}必须有空格隔开
3.两个花括号之间必须有空格隔开,比如if {} {},否则会报错 expect:extra characters after close-brace
3.使用{来衔接下一行,所以if的条件后需要加左花括号{
4.else不能单独放一行,所以else要跟在}后面
2.4 expect {},多行期望,匹配到哪条执行哪条
背景:有时执行shell后预期结果是不固定的,有可能是询问是yes/no,有可能是去输入密码,所以可以用expect{}
花括号内放多行语句,从上至下匹配,匹配到哪个expect执行哪句。
3.shell中调用expect来实现登录
我是通过在shell脚本中执行expect脚本的方式来实现的。当然可以将shell中定义的一些变量传递给expect脚本作为参数输入。

C. 如何在bash shell脚本中使用expect

1、首先检查你机器上有没有expect(我知道ubuntu默认是没有安装的)
ls /usr/bin | grep expect 看看有没有装expect
2、没有的话需要安装
在ubuntu的软件安装中心,搜索tcl 和tk 和expect并安装;
也可以命令行输入sudo apt-get install tcl tk expect
3. 环境ready了后,可以在shell脚本中用Here document的方式使用expect命令
Here document格式如下:
expect <<!
这中间都是expect命令
!
为防止错误,建议都顶格写,前面不要留空格。

D. 使用 expect 的时候,怎么使用shell的命令啊

expect 用的是 tcl 语言,你可以用
exec sleep 1
if { [file isfile certs/cert.key] } {
send_user "file existing"
} else {
send_user "file not existing"
}

更多细节可以去学一下 tcl 语言。

E. shell中 expect使用

send "pwd" 之后应该继续 expect 一个提示符,或者等待一个 timeout 的时间,然后send 一条命令 touch file1,如此继续。

不考虑 expect 练习的目的的话,完全这个任务最方便的是用 sudo 代替 su,可配置 sudo 执行你这个操作时不用密码。

阅读全文

与shellexpect命令相关的资料

热点内容
跨云服务器哪个平台最好 浏览:882
网络上找的资源该如何解压 浏览:753
视频编译是什么意思 浏览:371
时代峰峻app怎么用不了 浏览:860
泰拉瑞亚服务器怎么查看代码 浏览:136
牛奶压缩面膜怎么做 浏览:379
游戏源码都有哪些组成 浏览:537
服务器hdmi为什么会自检失败 浏览:831
苹果文件夹窗口 浏览:628
java中的增删改查 浏览:728
基岩版hypixel服务器地址是什么 浏览:731
腾讯云的服务器安全吗 浏览:323
360手机微信视频在哪个文件夹 浏览:808
基因传pdf 浏览:900
骑鹅app哪个好 浏览:549
sevlte源码分析 浏览:468
apk反编译出来js文件乱码 浏览:197
贵阳市有多少云计算服务器 浏览:836
下载源码代码岛手机版20 浏览:154
python生成好看报表 浏览:327