交互式shell脚本实操

        在Linux 编程中有时我们会用到shell脚本来帮我们做一些事情,但涉及到交互中需要人为交互的部分如果想自动化运行就比较麻烦,但shell操作中其实是考虑到这点的。下面我以一个例子来简要的说明,当然网上有很多相关的描述,只是信息较杂乱,不够直接明了。

        

 #首先介绍一下用到的命令:expect

expect [选项] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ] 

    选项 

         -c:从命令行执行expect脚本,默认expect是交互地执行的   

               示例:expect -c 'expect "\n" {send "pressed enter\n"}' 

         -d:输出调试信息   

               示例:expect  -d ssh.exp

          expect中的相关命令 

                spawn:启动新的进程 

                send:向进程发送字符串 

                expect:从进程接收字符串 

                interact:允许用户交互

                exp_continue  匹配多个字符串时在执行动作后加此命令 

 

     expect最常用的语法(tcl语言:模式-动作) 

        单一分支模式的语法: 

              expect "hi" { send "You said hi\n" }           匹配到 hi 后,会输出"you said hi",并换行

        多分支模式的语法: 

              expect "hi" { send "You said hi\n" } \ "hehe" { send “Hehe yourself\n" } \ "bye" { send "Goodbye\n" } 

        匹配 hi, hehe, bye 中的任意字符串时, 发送相应字符串。等同于:

              expect { "hi" { send "You said hi\n" } "hehe" { send "Hehe yourself\n" } "bye" { send "Goodbye\n" } } 

#expect安装:

根据你的系统不同,执行不同命令即可,简单这就不描述了。例如:yum -y install expect

OK,到这里是不是有点不耐烦了。。。接下来直接上一个例子,马上上手。。。。

#expect使用

先来看一个场景:

 

 此场景是需要使用 adduser 命令添加一个用户。期间需要用户交互的输入密码及确认密码的操作,这种在自动运行过程中认为不能干预,如果我们想系统自动化运行只能依靠脚本实现。

接下来看实现此功能的脚本

#!/usr/bin/expect
#创建用户命令:adduser ftp
#匹配password:字符串,然后输入123456\n  exp_continue 表示可以多次匹配就需要用到

set timeout 30

spawn adduser ftp
expect {
     "password:" { send "123456\n";exp_continue }
}

spawn adduser nobody
expect {
     "password:" { send "123456\n";exp_continue }
}

expect eof

这里用到了 #!/usr/bin/expect 解释;"password:" 就是我们期望匹配的字符。send 用于匹配期望后发送用户的输入,这里也就是我们的密码;是不是很简单。。。


创作不易,您的点赞+收藏是对我最大的支持

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值