1。head的第一行一定是这个#!/usr/bin/expect#####定义脚本是什么2.接收参数setname[lindex$argv0]setname2[lindex$argv1]puts$argvcputs$argv0expecteofexit#set赋值参数的含义#name参数名,设置时不需要加任何符号,调用该参数时需要加$符号,$name#[lindex$argv0]参数是这样的都写了,0表示第一个参数#puts输出字符串#$argvc参数个数#$argv0文件名#最后等待标志子进程结束的标识符eof,然后退出。(注意:这个waitforeof一定要有,如果没有eof,很可能子进程还没结束就退出了,出问题。)#执行格式./test.expparameter0parameter13,执行命令settimeout5spawnsshtest@172...expect"*password*"send“my_password\r”interact#这几句一般是一起用的#settimeout是设置过期时间。比如spawn执行的shell语句超时,不匹配预期字符串,会继续执行下一条语句#spawn执行shell命令,会fork出一个子进程执行#expect执行shellcommand之后,希望接受的字符串支持正则匹配。#send表示输入,记得写\r,回车让程序执行。#想象一下,当你用ssh远程登录服务器的时候,你就能明白什么意思了。需要手动输入密码,可以使用expect自动完成##interact。执行后,子进程将用户权限归还给用户,它会定位到当前子进程。例如,你执行远程登录后,必须留在远程服务器上4.其他语法格式##switchsetcolor[lindex$argv0]switch$color{apple{puts"appleisblue"}banana{puts"bananaisyellow"}}##ifif{"$test"=="apple"}{puts"$test"}else{puts"notapple"}##forfor{seti0}{$i<4}{incri}{puts"$i"}##while{$i<4}{puts"$i"incri}##Definefunctionproctest{}{puts"ok"}
