楼上正解!
ubuntu 与 debian 所用的 sh ,其实是 dash
你可以:
ls -l /bin/sh
会看到 /bin/sh -> dash
所以不了解 bash 与 dash 的差异,就有可能会误用一些语法。
在 dash 中,不接受数值化的 if 用法,所以 bash 中常用的:
for ((i=1; i<100; i++))
do
...
done
会报错,要变更为 while:
i=1
while ($i < 100)
do
...
((i++))
done
所以你之前的scripts会报错,我推测是没有在第一行放入 #!/bin/bash,而是放入 #!/bin/sh 或是完全没有放。在执行时,又使用 sh 去执行脚本,才会出现语法错误的问题。你可以测试一下。
此外,有些人以为第一行的 #!/bin/bash 只是一个「注释」而已,其实在脚本中,这行不仅是注释,还有「宣告」这个脚本要用哪种 shell 去执行。所以不应该省略,也不可以错置!