如何从java中的.sh文件中获取输入

时间:2013-12-05 16:48:56

标签: java bash unix

我的任务是使用文件(无套接字或线程)实现距离矢量多播路由协议(DVMRP)。我将有三个java程序

  1. Host.java
  2. Router.java
  3. Controller.java
  4. 测试程序是:

    1. 在新的终端窗口上运行test1.sh脚本文件
    2. test1.sh看起来像:

      rm -f lan?  hout?  hin?
      rm -f rout?
      router 0 0 1 &
      router 1 1 2 &
      router 2 2 3 &
      router 3 3 0 &
      controller host router 0 1 2 3 lan 0 1 2 3&
      

      这里包含

      的行
      router 0 0 1 &
      

      表示从可执行文件“router”(基本上是Router.java)创建进程,并在后台运行它,输入0 0 1,&我想是以bash模式说它。

      同样是下一行

      router 1 1 2 &
      

      表示从可执行文件“router”(基本上是Router.java)创建另一个进程,并在后台运行输入1 1 2。

      同样,行:

      controller ...
      

      表示从可执行文件“controller”(基本上是Controller.java)创建另一个进程,并在后台运行相应的输入。

      怎么做?对不起早先的混淆:)

2 个答案:

答案 0 :(得分:4)

首先编译java程序:

javac Router.java

您应该像这样调用java:

java Router 0 0 1 &

您可以找到Hello World example here

编辑:我仍然不完全确定我明白您要做的是什么,但您可能会尝试将上述test1.sh更改为:

rm -f lan?  hout?  hin?
rm -f rout?
java Router 0 0 1 &
java Router 1 1 2 &
java Router 2 2 3 &
java Router 3 3 0 &
java Controller host router 0 1 2 3 lan 0 1 2 3&

这将产生4个Router实例和一个Controller实例。 这假定您已首先编译程序:

javac Router.java Controller.java Host.java

答案 1 :(得分:0)

如果我理解正确,你有一个名为Router.java的Java程序,它接受参数,你想在后台运行它。

如果我的假设是正确的,那么你需要做一些事情:

  1. 编译java程序
  2. 在后台运行该程序
  3. 编译你的程序:

    javac Router.java
    

    运行程序:

    java Router 0 0 1 &
    

    在阅读(并再次阅读)您的问题和评论之后,我认为您的问题是您不知道如何从命令行将参数传递给Java程序。如果那是你的问题,你应该记住main函数有一个args参数,这是一种从命令行向程序传递值的方法。 args变量是您可以在代码中使用的String个对象数组:

    public class Router {
        /*
         * Your methods go here
         */
        public static void main(String[] args) {
            /*
             * The 'args' variable holds the arguments entered in the command line
             */
            if(args[0].equals("a")) {
                /*
                 * This is an example of how to read the arguments supplied in the command line.
                 */
            }
        }
    }