linux expect及自动化输入密码

交互式工具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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值