我在执行包含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
这真的很奇怪。任何指针都对我很有帮助。
答案 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"};