字符串初值处理和expect预期交互

案例2:字符串初值的处理

2.1 问题
本案例要求编写一个脚本sumx.sh,求从1-x的和,相关要求如下:
• 从键盘读入x值
• 当用户未输入任何值时,默认按1计算
2.2 方案
通过 v a r : − w o r d 判 断 变 量 是 否 存 在 , 决 定 变 量 的 初 始 值 。 2.3 步 骤 实 现 此 案 例 需 要 按 照 如 下 步 骤 进 行 。 步 骤 一 : 认 识 字 符 串 初 值 的 最 常 见 处 理 方 法 1 ) 只 取 值 , {var:-word}判断变量是否存在,决定变量的初始值。 2.3 步骤 实现此案例需要按照如下步骤进行。 步骤一:认识字符串初值的最常见处理方法 1)只取值, var:word2.31{var:-word}
若变量var已存在且非Null,则返回 $var 的值;否则返回字串“word”,原变量var的值不受影响。
变量值已存在的情况:

  1. [root@svr5 ~]# XX=11
  2. [root@svr5 ~]# echo $XX //查看原变量值
  3. 11
  4. [root@svr5 ~]# echo ${XX:-123} //因XX已存在,输出变量XX的值
  5. 11
    变量值不存在的情况:
  6. [root@svr5 ~]# echo ${YY:-123} //因YY不存在,输出“123”
  7. 123
    编写一个验证知识点的参考示例脚本如下:
  8. [root@svr5 ~]# cat /root/test.sh
  9. #!/bin/bash
  10. read -p “请输入用户名:” user
  11. [ -z $user ] && exit //如果无用户名,则脚本退出
  12. read -p “请输入密码:” pass
  13. pass=${pass:-123456} //如果用户没有输入密码,则默认密码为123456
  14. useradd $user
  15. echo “$pass” | passwd --stdin $user
    步骤二:编写sumx.sh脚本,处理read输入的初值
    用来从键盘读入一个正整数x,求从1到x的和;当用户未输入值(直接回车)时,为了避免执行出错,应为x赋初值1 。
    1)脚本编写参考如下
  16. [root@svr5 ~]# vim sumx.sh
  17. #!/bin/bash
  18. read -p “请输入一个正整数:” x
  19. x=${x:-1}
  20. i=1; SUM=0
  21. while [ $i -le $x ]
  22. do
  23.  let SUM+=i
    
  24.  let i++
    
  25. done
  26. echo “从1到 x 的 总 和 是 : x的总和是: xSUM”
  27. [root@svr5 ~]# chmod +x sumx.sh
    2)验证、测试脚本执行效果:
  28. [root@svr5 ~]# ./sumx.sh
  29. 请输入一个正整数:25 //输入25,正常读入并计算、输出结果
  30. 从1到25的总和是:325
  31. [root@svr5 ~]# ./sumx.sh
  32. 请输入一个正整数:70 //输入70,正常读入并计算、输出结果
  33. 从1到70的总和是:2485
  34. [root@svr5 ~]# ./sumx.sh
  35. 请输入一个正整数: //直接回车,设x=1后计算、输出结果
  36. 从1到1的总和是:1

3 案例3:expect预期交互

3.1 问题
本案例要求编写一个expect脚本,实现SSH登录的自动交互:
• 提前准备好目标主机,IP地址为192.168.4.5
• 执行脚本后自动登入,并且在目标主机建立测试文件 /tmp/mike.txt
3.2 方案
expect可以为交互式过程(比如FTP、SSH等登录过程)自动输送预先准备的文本或指令,而无需人工干预。触发的依据是预期会出现的特征提示文本。
储备知识(发送邮件的几种方式):

  1. [root@svr5 ~]# echo “test mail” | mail -s test root
  2. [root@svr5 ~]# mail -s test root < /etc/passwd
  3. [root@svr5 ~]# mail -s test root << EOF
  4. test mail
  5. hell world
  6. EOF
    3.3 步骤
    实现此案例需要按照如下步骤进行。
    步骤一:准备expect及SSH测试环境
    1)安装expect工具
  7. [root@svr5 ~]# yum -y install expect //安装expect
  8. … …
  9. Installed:
  10. expect.x86_64 0:5.44.1.15-5.el6_4
  11. Dependency Installed:
  12. tcl.x86_64 1:8.5.7-6.el6
  13. [root@svr5 ~]# which expect //确认expect路径
  14. /usr/bin/expect
    步骤二:编写脚本,实现免交互登录
    1)任务需求及思路分析
    在SSH登录过程中,如果是第一次连接到该目标主机,则首先会被要求接受密钥,然后才提示输入密码:
    注意:不要照抄这里的IP地址,需要根据自己的实际IP填写!!!
  15. [root@svr5 ~]# ssh root@192.168.4.5 //连接目标主机
  16. The authenticity of host ‘192.168.4.5 (192.168.4.5)’ can’t be established.
  17. RSA key fingerprint is 58:a0:d6:00:c7:f1:34:5d:6c:6d:70:ce:e0:20:f8:f3.
  18. Are you sure you want to continue connecting (yes/no)? yes //接受密钥
  19. Warning: Permanently added ‘192.168.4.5’ (RSA) to the list of known hosts.
  20. root@192.168.4.5’s password: //验证密码
  21. Last login: Thu May 7 22:05:44 2015 from 192.168.4.5
  22. [root@svr5 ~]$ exit //返回客户端
  23. logout
  24. Connection to 192.168.4.5 closed.
    当然,如果SSH登录并不是第一次,则接受密钥的环节就没有了,而是直接进入验证密码的过程:
    注意:不要照抄这里的IP地址,需要根据自己的实际IP填写!!!
  25. [root@svr5 ~]# ssh root@192.168.4.5 //连接目标主机
  26. root@192.168.4.5’s password: //验证密码
  27. Last login: Mon May 11 12:02:39 2015 from 192.168.4.5
  28. [root@svr5 ~]$ exit //返回客户端
  29. logout
  30. Connection to 192.168.4.5 closed.
    2)根据实现思路编写脚本文件
    脚本内容参考如下版本1:
    注意:不要照抄脚本里的IP地址与密码,需要根据自己的实际情况填写!!!
  31. [root@svr5 ~]# vim expect_ssh.sh
  32. #!/bin/bash
  33. expect << EOF
  34. spawn ssh 192.168.4.5 #//创建交互式进程
  35. expect “password:” { send “123456\r” } #//自动发送密码
  36. expect “#” { send “touch /tmp.txt\r” } #//发送命令
  37. expect “#” { send “exit\r” }
  38. EOF
  39. [root@svr5 ~]# chmod +x expect_ssh.sh
    通过循环批量操作,版本2:
    注意:不要照抄脚本里的IP地址与密码,需要根据自己的实际情况填写!!!
  40. [root@svr5 ~]# vim expect_ssh.sh
  41. #!/bin/bash
  42. for i in 10 11 #注意IP根据实际情况填写
  43. do
  44. expect << EOF
  45. spawn ssh 192.168.4.$i #//创建交互式进程
  46. expect “password:” { send “123456\r” } #//自动发送密码
  47. expect “#” { send “touch /tmp.txt\r” } #//发送命令
  48. expect “#” { send “exit\r” }
  49. EOF
  50. done
  51. [root@svr5 ~]# chmod +x expect_ssh.sh
    注意事项:
    expect脚本的最后一行默认不执行
    如果不希望ssh时出现yes/no的提示,远程时使用如下选项:
    #ssh -o StrictHostKeyChecking=no server0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值