交互式工具expect
1.常用命令
spawn commands 另起一个进程运行命令
expect ” ” 期待从shell接收的字符串,不能包括特殊符号"[“等,可以用*省略,只匹配关键字符
send " " 发送字符串
interact 将控制权从expect交给用户人工操作
#!/usr/bin/expect
set timeout -1
spawn sudo ls
expect "*sudo*" #输入密码提示,具体看shell提示
send "demo123\n" #输入密码
interact
expect_out 从shell接收buffer输出,可用idx索引
expect "hi"
send "you typed $expect_out(buffer)"
send "but I only expected $expect_out(0,string)"
exp_continue 继续处理接下来的expect
spawn echo "start game:yes/no"
expect {
"yes/no" {send "yes\n";exp_continue;}
"yes" {send "hello\n";set hello "hello";exp_continue;}
}
spawn echo $hello
命令行参数
可用**[lindex $argv n]**接收第n个参数,[lrange $argv a b]获取a-b内参数
./test.exp 123
$argc #参数个数
#argv0 #文件名
$argv 0 $argv 1 #第1个 第2个参数
执行sleep命令
exec sleep 1
2.语法
1.设置变量
set row $argv 0
2.输出
puts stderr $agc #stderr可选
3.函数
auto_login {usr psword} {
puts $usr
puts $psword
}
auto_login $usr $psword
4.if else
特别注意if else 与 { 之间的空格
if {$argc<2} {
puts "args less than two"
} else {
puts "args enough"
}
5.while
中间的条件$num<5使用大括号,incr ++
set num 1
while {$num<5} {
puts $num
incr num
}
6.for
第一种:
for {set i 0} {$i<4} {incr i} {
puts "$i"
}
第二种:
foreach number {
1
2
thread
row
} {
puts "$number"
}
linux桌面生成快捷方式
1.生成文件的方式
进入/usr/share/application,如果发现文件夹里面已经存在程序的桌面启动方式,直接复制到桌面,没有的话进行下一步:
新建一个空文件sublime.desktop,内容如下:
[Desktop Entry]
Name=sublime #快捷方式名称
Comment=sublime #备注
Exec=/home/demo/download/sublime_text_3/sublime_text #可执行程序的路径
Icon=/home/demo/download/sublime_text_3/Icon/256x256/sublime-text.png #程序图标的路径
Terminal=false #后面四行都一样
StartupNotify=true
Type=Application
Categories=Application;Development;
然后执行cp /usr/share/application/sublime.desktop ~/桌面/
双击打开桌面图表标,如果出现启动程序不信任的窗口,右键单击选择属性,然后点击权限,选中允许程序作为信任的可执行文件,之后双击打开即可
遇到的坑:
1.参考其他人的博客,其中有一行 Encoding=UTF-8 #设置编码方式,
加入这行后,发现启动出错,然后删除了就可以启动了
2.生成链接方式
ln -s /home/demo/download/sublime_text_3/sublime_text ~/桌面/sublime
但出现启动程序出错,还未解决
自动化脚本自动输入密码
1.sudo -S
echo "hello world" | sudo -S ls
echo 后为密码,通过管道传给sudo
sudo -S选项表示从stdin从标准输入获得
2.shell交互式工具expect
#!/usr/bin/expect
set timeout -1
spawn sudo ls
expect "*sudo*" #输入密码提示,具体看shell提示
send "demo123\n" #输入密码
interact