执行包含Java的while循环的shell脚本

时间:2014-05-13 16:20:27

标签: java shell process

我在执行包含while循环的shell脚本时遇到了严重问题。这是我的shell脚本:

echo Here 1
sleep 0.05
echo Here 2
sleep 0.05
echo Here 3

ic=70
while [ $ic -ge 40 ]
do
        #sleep 0.05
        ic=$[$ic-1]
        echo Here $ic
done

当我通常从终端执行脚本/home/pi/tbe/testSleep.sh时,它正在运行。并打印所有echo

现在我已经编写了这个java方法来执行文件:

public static void main(String[] args) throws IOException, InterruptedException {       
    String command = "/home/pi/tbe/testSleep.sh";
    System.out.println("Executing command: " + command);

    Process process = new ProcessBuilder(command).start();

    BufferedReader reader = new BufferedReader(new InputStreamReader(
            process.getInputStream()));
    String line = null;

    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }

    process.waitFor();
    int exitValue = process.exitValue();
    System.out.println("Command executed. Exit value: " + exitValue);
    process.destroy();  
}

当我执行它时,我只能看到以下输出:

Executing command: /home/pi/tbe/testSleep.sh
Here 1
Here 2
Here 3
Here $[70-1]
Command executed. Exit value: 0

这真的很奇怪。任何指针都对我很有帮助。

2 个答案:

答案 0 :(得分:1)

我在Ubuntu中运行你的脚本:

$ sh script.sh
Here 1
Here 2
Here 3
Here $[70-1]
script.sh: 8: [: Illegal number: $[70-1]

显然$ [70-1]没有被评估,只是被视为文字...

我保存后看到了评论。他们是对的。使用bash(我很懒)给出了正确的结果。

答案 1 :(得分:1)

执行命令的shell似乎与用于在命令行上运行脚本的shell不同。将shell指定为bash。

在脚本中添加shebang(作为第一行)。在脚本

中具体了解shell是一种很好的做法
#!/bin/bash

您还可以指定要用于shell脚本的shell

String[] command = {"/bin/bash", "/home/pi/tbe/testSleep.sh"};