Linux Shell 中的 expect 自动化编程工具语言,语句控制器及运算符。

Linux Shell 中的 expect 自动化编程工具语言,语句控制器及运算符。

1. expect

  • expect
    是一个免费的编程工具语言,建立在 tcl 基础上的一个工具,它可以让一些需要交互的任务自动化地完成。相当于模拟了用户和命令行的交互操作。

1.1 expect 安装及基本介绍

安装

 expect 依赖于 tcl,所以需要首先安装 tcl 再安装 expect
 yum install tcl -y 
 yum install expect -y

原理机制
首先使用 spawn 开启一个会话,然后使用 expect-send 对来执行交互式操作。
spawn 后面跟上一个命令操作,表示开启一个会话。expect 等待输出特定的字符串(通常是提示符),然后使用send 发送交互字符串。比如:

 编写脚本内容如下:
 #!/bin/bash
 /usr/bin/expect <<EOF
 spawn ssh root@172.25.151.250        # 远程登录
 expect {
         "yes/no" { send "yes\r";exp_continue }  
         # 关键字为 yes/no 时,输入 yes
         "password" { send "westos\r" }
         # 关键字为 password 时,输入要登录帐户的密码
 }
 expect eof     #结束符
 EOF
 ~        

脚本内容:
这里写图片描述
执行如下:
这里写图片描述

1.2 expect 基本语法

 1. #!/usr/bin/expect  # 脚本中首先引入文件,表明使用的是哪一个shell
 2. set
 set timeout 30  # 设置会话超时时间为30s, 若不限制超时时间则应设置为-1
 set 还可以设置变量
 # 使用变量语句:$param 或者 ${param}({}用来避免 param 和后面的字符串拼接起来导致错误)
 set param "param_str"
 set param 1
 3. spawn
 spawn 后面跟一个命令,开启一个会话
 spawn ${cmd} # for example : spawn ssh root@IP
 4.expect - send
 expect 接收命令执行后的输出,然后和期望字符串匹配,若对应这执行相应的send来发送交互信息。
 expect "$case1" {send "$respond1\r"} # 这一行等同于下面两行
 expect "$case1"
 send "$response1\r"

 expect 可以有多个分支,就像switch语句一样。
 expect 
 {
    "$case1" {send "$response1\r"}
    "$case2" {send "$response2\r"}
    "$case3" {send "$response3\r"}
 }
 5. 结束符
 expect eof :等待执行结束,若没有这一句,可能导致命令还没执行,脚本就结束了
 interact : 执行完成后保持交互状态, 这时可以手动输入信息
 注:expect eof 与 interact 二选一即可
 6. 接收参数
 参数存在argv中,使用第一个参数如下:
 set param0 [lindex $argv 0]
 $argc表示参数个数,判断语句如下:
 if {$argc < 1} {
    #do something
    send_user "usage: $argv0 <param1> <param2> ... "
    exit
 }
 注:$argv0 是脚本名,但[lindex $argv 0]是第一个参数 param1, [lindex $argv 1]
 是第二个参数 param2, 以此类推
 send_user 用来显示信息到父进程(一般为用户的shell)的标准输出。

示例如下:
编辑一个ask.sh 的脚本,实现交互输出
编辑内容如下:
这里写图片描述
执行如下:
这里写图片描述
编辑 answer.sh 编本,实现对 ask 脚本的内容回答
这里写图片描述
执行如下:
这里写图片描述
带参数的 answer 脚本
内容如下:
这里写图片描述
执行如下:
这里写图片描述

2. 语句控制器(exit,continue,break)

2.1 exit

 exit n     # 退出当前脚本,退出值为 n

编写脚本进行测试
编写一个循环脚本,无法自动退出
这里写图片描述
执行如下:
这里写图片描述
加入 exit 语句控制器
这里写图片描述
进行测试,会退出循环
这里写图片描述

2.2 continue

 continue   # 提前结束循环内部内容,但不终止循环

编辑脚本进行测试
编辑脚本,显示 1~10,不显示 4
脚本内容如下:
这里写图片描述
执行结果
这里写图片描述

2.3 break

 break      # 退出此循环 

编辑脚本,显示 1~10,不显示 4
这里写图片描述
执行如下:
这里写图片描述

3. Shell 中常用的运算方式及运算符号

3.1 运算命令

运算命令含义
(( ))用于整数运算
let用于整数运算,与(())类似
expr用于整数运算,功能相对较多
bclinux下的计算器,适合整数及小数运算
$[ ]用户整数运算

3.2 运算方式及运算符号

运算符号意义
+, -加法,减法
*, / ,%乘法,除法,取余
**幂运算
++, –自增加,自减少
<, <= , -= , /= , %=赋值运算,例如 a+=1 相当于 a=a+1

编写脚本进行测试
示例一:
编写一个简单的脚本,实现计算功能
脚本编辑如下:
这里写图片描述
执行如下:
这里写图片描述
示例二:
编写一个 1分10秒的倒计时
编写内容如下:
这里写图片描述
执行如下:
这里写图片描述
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值