zoukankan      html  css  js  c++  java
  • 关于交互Shell的两个小示例

    1、需要从用户接收参数,直接看示例:

    zwang@wzc:/tmp$ cat test.sh 
    #!/bin/sh
    read -p "请输入起始日期(yyyymmdd):" d1
    read -p "请输入结束日期(yyyymmdd):" d2
    read -p "起始日期$d1 ~ 结束日期$d2,共XX条记录,是否确认删除(Y/N), 默认为N:" c
    if [ "$c" = "Y" ]; then
    echo "共删除XX条记录。"
    else
    echo "删除操作被取消!"
    fi
    zwang@wzc:/tmp$
    zwang@wzc:/tmp$
    zwang@wzc:/tmp$ sh test.sh
    请输入起始日期(yyyymmdd)20110701
    请输入结束日期(yyyymmdd)20110801
    起始日期20110701 ~ 结束日期20110801,共XX条记录,是否确认删除(Y/N), 默认为N:
    删除操作被取消!
    zwang@wzc:/tmp$
    zwang@wzc:/tmp$ sh test.sh
    请输入起始日期(yyyymmdd)20110701
    请输入结束日期(yyyymmdd)20110801
    起始日期20110701 ~ 结束日期20110801,共XX条记录,是否确认删除(Y/N), 默认为N:Y
    共删除XX条记录。

    2、自动登录操作,需要先安装expect软件包:

    sudo aptitude install expect //会自动安装依赖文件tcl8.5

    先看一个本地root用户切换示例:

    #!/usr/bin/expect
    spawn su root
    expect "密码:"
    send "yourpassword\r"
    expect eof
    exit

    注意:

    • 脚本的第一行是/usr/bin/expect,而不再是通常shell脚本所指定的/bin/sh,所以由此可以看出expect也类似于一个bash之类的shell
    • spawn是expect的内置命令,后面跟真正要执行的操作
    • expect也是一内置命令,判断前面执行命令(即"su root")的返回值中是否包含指定的字符串;如果是英文系统,该行应改成:expect "password:"
    • send也是一内置命令,即发送你的密码"yourpassword\r";测试时这里需改成你真实的密码,最后的'\r'不可少
    • 最后的部分表示执行完操作后就断开掉


    如果想在执行完root切换之后保持root窗口继续交互,需要对最后两行做如下修改:

    #!/usr/bin/expect
    spawn su root
    expect "密码:"
    send "yourpassword\r"
    interact

    这样执行后会继续保存在root窗口。

    关于expect脚本的执行:
    1. 给其添加可执行权限:

    $ chmod +x test.expect //也可以取名test.sh之类
    $ ./test.expect

    或者直接:

    $ expect test.expect

    接着再看一个远程登录的示例:

    #!/usr/bin/expect
    set timeout 60
    spawn ssh -l username 192.168.1.10 //根据你的实际远程主机用户信息进行测试
    expect "password:" //如果是中文系统,应改成:expect "密码:"
    send "yourpassword\r" //改成你真实的密码
    interact

    第二行set语句设置超时时间为60秒!

  • 相关阅读:
    HDOJ 1846 Brave Game
    并查集模板
    HDU 2102 A计划
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    POJ 1321 棋盘问题
    CF 999 C.Alphabetic Removals
    CF 999 B. Reversing Encryption
    string的基础用法
    51nod 1267 4个数和为0
  • 原文地址:https://www.cnblogs.com/wzc0066/p/2949211.html
Copyright © 2011-2022 走看看