ExpectJ冒险

时间:2011-04-20 09:41:27

标签: java shell unix expect nested-if

这是我的剧本

echo "Name:"
read name
if [ "$name" == "abcd" ]; then
    echo "correct username"
    echo "Password:"
    read password
    if [ "$password" == "pwd" ]; then
        echo "Hello"
    else
        echo "Wrong password"
    fi
else
    echo "wrong username"
fi

=============================================== ==================================

这是我的Java代码

import java.io.IOException;
import java.util.*;

import expectj.*;

public class Trial {
    public static void main(String[] args) {

        ExpectJ exp = new ExpectJ();
        String command = "sh /root/Desktop/hello.sh";
        Spawn s = null;
        try {           
            s = exp.spawn(command);         
            s.expect("Name:");
            s.send("abcd\n");
            System.out.println("Current status: "+s.getCurrentStandardOutContents());           
            s.expect("correct username");   
            s.expect("Password:");
            s.send("pwd\n");
            s.expect("Hello");
            System.out.println("final output: " + s.getCurrentStandardOutContents());
            System.out.println("Possible errors: " + s.getCurrentStandardErrContents());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("ioe\n");
        } catch (TimeoutException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("toe\n");
        } finally {
            if (s != null) 
                s.stop();           
        }       
    }
}

=============================================== =============================

这是我的 OUTPUT

Name:
Current status: Name:
correct username
Password:

=============================================== =============================

它没有进一步发展。它也没有终止..我不知道为什么......

2 个答案:

答案 0 :(得分:1)

当您对此行发表评论时是否有效:

System.out.println("Current status: "+s.getCurrentStandardOutContents());

也许应用程序“期待”值"correct username"但是会​​看到"Current status: Name:“(来自”debug“行的输出)。不是jExpert的专家,但是如果该工具只是重定向并且监视System.out,它将看到脚本输出以及您打印到控制台的所有内容。

答案 1 :(得分:0)

我明白了......连续2次 s.expect()语句永远无法正常工作。为了摆脱它,可以添加 \ n

在这种情况下

s.expect(“正确的用户名”);
s.expect( “密码”);

必然不起作用。因此,应该用 -

代替

s.expect(“正确的用户名\ n密码:”); //这将起作用