0

这是我的脚本

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();           
        }       
    }
}

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

这是我的输出

Name:
Current status: Name:
correct username
Password:

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

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

4

2 回答 2

1

当您评论此行时它是否有效:

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

也许应用程序正在“期望”该值"correct username",但看到"Current status: Name:“而不是”(“调试”行的输出)。不是 jExpert 专家,但如果该工具只是重定向和监视System.out,它将看到脚本输出以及所有内容你打印到控制台。

于 2011-04-20T09:57:48.847 回答
0

我明白了..2个连续的 s.expect()语句永远无法工作..所以要摆脱它,可以添加一个\n ..

在这种情况下

s.expect("正确的用户名");
s.expect("密码:");

肯定不行。所以,应该换成——

s.expect("正确的用户名\n密码:");//这样就可以了

于 2011-05-11T08:37:53.643 回答