shell交互_shell交互模式 - CSDN
精华内容
参与话题
  • shell中自动交互的方法

    万次阅读 2018-05-30 17:43:29
    delimiter是一种非常有用的命令,shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符, shell就知道输入结束了。最常见的delimiter分界符是EOF,当然完全可以自定为其他...

    第一种:输入重定向Here Document

    重定向操作符command << delimiter是一种非常有用的命令,shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符, shell就知道输入结束了。最常见的delimiter分界符是EOF,当然完全可以自定为其他字符。

    Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。

    它的基本的形式如下:

    command << delimiter
        document
    delimiter

    它的作用是将两个 delimiter 之间的内容(document) 作为输入传递给 command。

    注意:

    • 结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。

    • 开始的delimiter前后的空格会被忽略掉。

    #!/bin/bash

    ftp -i -n 192.168.167.187 << EOF
    user hzc 123456
    pwd
    cd test
    pwd
    close
    bye
    EOF
        测试可以发现,如上代码使用帐号名hzc,密码123456成功登陆了ftp服务器,并进入目录,打印出了pwd。

    第二种:管道,echo + sleep + |

        交互信息的另一个自动输入方法,管道,通过echo + sleep + | 。

    #!/bin/bash

    (echo "curpassword"
    sleep 1
    echo "newpassword"
    sleep 1
    echo "newpassword")|passwd
    即:执行passwd命令后,输入curpassword,1秒后输入newpassword,1秒后再次输入newpassword,达到把当前用户的curpassword改成newpassword。

    第三种:expect命令

        expect就是一个专门用来实现自动交互功能的工具,expect的语法可以参考相关资料,代码如下:

    #!/usr/bin/expect
    spawn su root
    expect "password: "
    send "123456\r"
    expect eof
    exit

    脚本命名为xx.exp

    第四种:Here Document结合expect

    expect <<!
    这中间都是expect命令
    !

    例如:

    expect<<!
        spawn sudo chown -R adminHard:adminHard $newdir
        expect {
        "*passwor*" {send "$COMPILE_SERVER_SSH_PASSWORD\n" ; exp_continue}
        }

    !

    注:expect命令

    [set timeout 30]     
        基本上认识英文的都知道这是设置超时时间的,现在你只要记住他的计时单位是:秒   
        
    [spawn ssh -l username 192.168.1.1]    

    spawn command命令会fork一个子进程去执行command命令,然后在此子进程中执行后面的命令;   

    spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。    

        它主要的功能是给ssh运行进程加个壳,用来传递交互指令。   
       
    [expect "password:"]   
        这里的expect也是expect的一个内部命令,有点晕吧,expect的shell命令和内部命令是一样的,但不是一个功能,习惯就好了。这个命令的意思是判断上次输出结果里是否包含“password:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒   
       
    [send "ispass\r"]   
        这里就是执行交互动作,与手工输入密码的动作等效。   
        温馨提示: 命令字符串结尾别忘记加上 “\r”,如果出现异常等待的状态可以核查一下。   
       
    [interact]    

        执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行一段命令就退出,可改为[expect eof]

    expect可以让你使用“-c”选项,直接在命令行中执行它,例如:

    expect -c '
            spawn git pull
            expect {
            "Usernam*" {send "code_manager@ren001.com\n"; exp_continue }
            "Passwor*" {send "$GIT_CODE_PASSWORD\n" ; exp_continue}
            }
            '

    展开全文
  • Shell_EOF交互shell重定向

    千次阅读 2018-09-04 14:04:30
    #command &lt;&lt;EOF xxx &gt;EOF 第二个EOF顶格写,将xxx传递给command。 主要应用:shell脚本中mysql/sqlplus连接数据库,后直接查询,不再弹出交互式画面。

    #command <<EOF xxx
    >EOF


    第二个EOF顶格写,将xxx传递给command。
    主要应用:shell脚本中mysql/sqlplus连接数据库,后直接查询,不再弹出交互式画面。

    展开全文
  • shell 交互

    2018-06-28 15:25:53
    java执行shell交互:方法一:用linux自带的expect expect -c 'spawn /opt/hadoop-2.7.4/bin/hadoop namenode -format  expect "Proceed formatting" send "Y\r" expect "...

    java执行shell交互:

    方法一:

    用linux自带的expect

     expect -c 'spawn /opt/hadoop-2.7.4/bin/hadoop namenode -format 
    expect "Proceed formatting"
    send "Y\r"
    expect "filesystem in QJM "
    send "Y\r"
    interact '

    java中要转义:runcmd(" expect -c 'spawn /opt/hadoop-2.7.4/bin/hadoop namenode -format\n" +
            "expect \"Proceed formatting\"\n" +
            "send \"Y\\r\"\n" +
            "expect \"filesystem in QJM \"\n" +
            "send \"Y\\r\"\n" +
            "interact '\n");

    方法二:

    封装jsch,使用流处理


    展开全文
  • 自动交互最关键的就是交互信息的自动输入,首先联想到文件重定向,在shell编程中有这样一种用法(参考LINUX与UNIX SHELL编程指南 chapt 5.7):"command << delimiter从标准输入中读入,直至遇到delimiter分界符...

    方法一

        自动交互最关键的就是交互信息的自动输入,首先联想到文件重定向,在shell编程中有这样一种用法(参考LINUX与UNIX SHELL编程指南 chapt 5.7):"command << delimiter  从标准输入中读入,直至遇到delimiter分界符。"

        重定向操作符command << delimiter是一种非常有用的命令,shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符, shell就知道输入结束了。最常见的delimiter分界符是EOF,当然完全可以自定为其他字符。

        对于需求1 要求的自动登陆ftp,并作系列操作,则可以用这种方法进行自动交互。代码如下:

    #!/bin/bash
    
    ftp -i -n 192.168.167.187 << EOF
    user hzc 123456
    pwd
    cd test
    pwd
    close
    bye
    EOF

        测试可以发现,如上代码使用帐号名hzc,密码123456成功登陆了ftp服务器,并进入目录,打印出了pwd。

    方法二

        需求2中要求采用非交互的方式改变登录用户密码,尝试用方法1,无法实现。

        这时候联想到交互信息的另一个自动输入方法,管道,通过echo + sleep + | 可以实现这个需求。

    #!/bin/bash
    
    (echo "curpassword"
    sleep 1
    echo "newpassword"
    sleep 1
    echo "newpassword")|passwd


        测试通过,运行这个脚本,直接把当前用户的curpassword改成newpassword。

    方法三

        需求3中要求自动登录root账号,尝试方法1和方法2,都出现错误提示standard in must be a tty。

        这时候尝试寻找外部帮助,一个shell工具expect可以实现这个功能,其实expect就是一个专门用来实现自动交互功能的工具,expect的语法可以参考相关资料,代码如下:

    #!/usr/bin/expect
    
    spawn su root
    expect "password: "
    send "123456\r"
    expect eof
    exit

    测试通过,运行这个脚本,直接从当前用户登录到root用户。

    总结

        方法一(重定向)简单直观,也经常有实际应用,但是在自动交互领域功能有限。
        方法二(管道)也很简单直观,有时甚至不用sleep配合就能展现强大的自动交互实力,但是在某些时候也束手无策。
        方法三(expect)在功能上是最为强大的,expect本来就是为实现自动交互功能而生,但是缺点是需要安装expect包,在嵌入式等环境下难以安装。

     

    展开全文
  • shell交互输入自动化

    千次阅读 2018-07-13 17:51:26
    shell中交互输入自动化shell中有时我们需要交互,但是呢我们又不想每次从stdin输入,想让其自动化,这时我们就要使shell交互输入自动化了。这个功能很有用的哟。好好学习。1 利用重定向 重定向的方法应该是最简单的...
  • shell实现交互

    千次阅读 2018-10-25 18:34:28
    read -p "you are sure you wang to xxxxxx?[y/n]" input echo $input if [ $input = "y" ];then echo "ok " fi
  • 两种shell交互的方法

    2017-05-16 16:09:38
    声明:允许转载,转载请注明链接,谢谢合作! 两种方法,另附效果图: 第一种方案: while true; do   read -p "Do you wish to install this program?" yn   case $yn in  ... * ) echo "Please
  •  * 简单的交互shell  * 用户输入一行命令 实现和shell 进程一样的效果。。  * example:  * cat demo1.txt  * ps -e  * ls -lath  * top  * who  * ....  * 输入上面这些命令和shell 实现一样的...
  • shell提示输入一个变量,赋值个MY_FILE_NAME vim input.sh #!/bin/bash read -p "Please input a filename1:" MY_FILE_NAME1 read -p "Please input a filename3:" MY_FILE_NAME2 echo your...
  • 曾经写过“交互shell和非交互shell、登录shell和非登录shell的区别”,但那时理解相对更浅一些,现在多了一点认识,把这篇文章稍微完善一下吧。 交互shell和非交互shell、登录shell和非登录shell的区别。...
  • 首先我们需要把bash理解为一种模式,我们不如把这种模式想象成类似于洋葱一样的结构,我们可以一层一层剥开,也就是说我们可以一层一层的进入子shell。就好比我们进入一栋楼,打开一个房间是一个环境,在当前这个...
  • Linux中shell脚本运行时经常需要进行交互,比如安装软件的过程中对license声明的确认,需要输入yes,回车之类的确认信息。这个在自动化安装的时候就会是个问题。 通常对于这个问题比较灵活的解决方法就是TCL的...
  • 摘要:在进行环境变量设置和命令别名的设置的时候,...本文来源:bash 深入理解:交互shell和非交互shell、登录shell和非登录shell的区别 1.交互式bash与非交互式bash 交互式模式就是在终端上执行,shell等待
  • Linux-----Shell脚本交互实现自动输入密码
  • shell脚本中自动化交互输入

    千次阅读 2018-11-15 18:35:06
    有的shell脚本需要交互输入,如果需要批量或者自动化,可以根据实际情况按照如下方法处理 1.重定向 这个方法很简单,把需要输入的内容按每行写入到文档中,然后运行脚本 ./vpncmd &lt; content 2.使用管道 ...
  • 交互shell和非交互shell、登录…

    千次阅读 2014-11-25 17:56:45
    交互shell和非交互shell、登录shell和非登录shell的区别。 首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录。 交互shell和非交互shell 交互式模式就是shell等待你的输入,并且...
  • Shell脚本交互之:自动输入密码

    万次阅读 2016-04-09 19:54:39
    平时在控制台输入指令如:sudo、ssh、ftp或者修改admin权限的文件时候都会要求输入password,但是在she'll脚本运行过程中该如何交互实现自动输入密码呢? 下面总结三种实现方法。 一、重定向:用重定向方法实现交互...
  • 按照bash是否与用户进行交互,可以将其分为“交互式”与“非交互式”;而按照bash是否被用户登陆,又可将其分为“登陆shell”与“非登陆shell”。本文以CentOS系统为例,着重讨论和总结了shell的“交互”与“登陆”...
  • 交互式输入shell参数

    千次阅读 2012-06-15 13:12:31
    Let's write a script that reads input interactively and uses this script for automation examples: #!/bin/bash #Filename: interactive.sh read -p "Enter number:" no ; #-p "Enter number:
  • shell交互输入自动化

    万次阅读 2012-06-03 09:51:48
    shell中有时我们需要交互,但是呢我们又不想每次从stdin输入,想让其自动化,这时我们就要使shell交互输入自动化了。这个功能很有用的哟。好好学习。 1 利用重定向  重定向的方法应该是最简单的 例: 以下的...
1 2 3 4 5 ... 20
收藏数 153,478
精华内容 61,391
关键字:

shell交互