将变量从Java传递给Shell脚本

我正在尝试从Java代码运行shell脚本。 目前我在脚本中手动提供数据,但我希望能够从运行脚本的Java代码中提供变量。

这是Java代码和脚本:

public static void main(String[] args) { try { ProcessBuilder pb = new ProcessBuilder( "/home/najib/upload.sh"); Process p = pb.start(); p.waitFor(); System.out.println("Script executed successfully"); } catch (Exception e) { e.printStackTrace(); } } 

shell代码:

 #!/bin/bash /usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="set AUTOCOMMIT MANUAL;"& /usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="delete from DB.DBA.load_list;"& /usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="SPARQL CREATE GRAPH ;"& /usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="ld_dir('/home/najib', 'VAR2', 'VAR1');"& wait /usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="rdf_loader_run();" 

我想知道在哪里可以将变量放在Java代码中,以及如何在运行时调用它!

编辑:根据提供的解决方案,我将脚本更改为:

 /usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="SPARQL CREATE GRAPH ;"& /usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="ld_dir('/home/najib', '$1', '$2');"& 

我还在脚本的末尾添加了一个echo,以查看变量是否正确传递,看起来它们是。 第一个命令(SPARQL一个)似乎工作,因为图形确实已创建,但第二个命令未正确处理..

您可以将params传递给shell脚本并在de script中使用它们.Class ProcessBuilder有一个构造函数,它接受命令执行以及要传递给可执行文件的参数列表:

 ProcessBuilder(String... command) 

你必须像这样传递params:

  ProcessBuilder pb = new ProcessBuilder("/home/najib/upload.sh",param1,param2,param3); 

在脚本param1里面是$ 1,param2是$ 2,param3是$ 3(你可以根据需要传入构造函数中的多个参数)

在脚本中使用shell变量,通过环境在Java中设置它们:

 import java.util.Map; class so1 { public static void main(String[] args) { try { ProcessBuilder pb = new ProcessBuilder("/home/...sh"); Map env = pb.environment(); env.put("VAR1", "something"); Process p = pb.start(); p.waitFor(); System.out.println("Script executed successfully"); } catch (Exception e) { e.printStackTrace(); } } } 

在脚本中:

 /usr/local/virtuoso-opensource/bin/isql 1111 dba dba exec="SPARQL CREATE GRAPH $VAR1;"&