gun*_*ess 0 bash shell ubuntu centos
我是新手来抨击脚本,所以我错过了一些东西,但甚至无法想象缺少什么.以前脚本运行良好,CentOS 5但最近我已切换到Ubuntu 14.04 LTS,循环开始不按预期工作.这是代码:
#!/bin/bash
for n in {10..99}
do
if ! ps aux | grep "ABC$n DEF " | grep -v grep
then
echo "Activating ABC$n DEF "
fi
done
Run Code Online (Sandbox Code Playgroud)
如果我./runMyScript.sh按照预期的那样运行脚本,因为它从10到99激活:
Activating ABC10 DEF
Activating ABC11 DEF
Activating ABC12 DEF
...
Activating ABC99 DEF
Run Code Online (Sandbox Code Playgroud)
但是,如果我运行代码,因为sh runMyScript.sh它不循环并且它激活单个元素,Activating ABC{10..99}DEF仅打印.脚本文件也可以作为两个方法执行-rwxr-xr-x.
我不知道这是否正常,因为两种方法的工作方式就像平台上的魅力一样CentOS 5.我知道在shell ./上运行bash并sh运行,但那么在CentOS上有什么用,在Ubuntu上有什么用呢?我可以做什么,两个平台,两种方法都一样?
sh是dash在Ubuntu上,它不理解循环序列{10..99}.所以它循环一次将整体解释{10..99}为一个字符串.我相信shCentOS上的默认值是bash或ksh.所以它有效.
./script.sh如果您有适当的shebang,请务必使用,或者[bash|ksh|whatever] script.sh如果您为特定的shell编写代码,请使用.使用与编写代码不同的解释器并不总是有效.即使它偶尔也会这样做,因为一个shell的构造可能不可用或具有相同的语义,所以它很危险.
| 归档时间: |
|
| 查看次数: |
28 次 |
| 最近记录: |