您的位置:首页 > 运维架构 > Shell

巨简单循环shell脚本验证&符号后台操作(并记录查看当前shell的方法)

2010-11-30 22:10 711 查看
今天看大名鼎鼎的abs,看到里面说在命令后面加&符号即可表示该命令后台执行。

如 sleep 10 & 在命令行的运行结果是

[1]7039 #(7039)是进程号

于是按照书中举例编写如下脚本:

#!/bin/sh

for i in 1 2 3 4 5 6 7 8 9 10

do

echo -n "$i "

done & #据说此处可以使上述循环后台执行

echo

for i in 11 12 13 14 15 16 17 18 19

do

echo -n "$i "

done

echo

上述脚本预期运行结果为 上述数字可能随机排列 即 并不一定按照顺序输出,因为第一个循环为后台执行。

但运行后发现 结果仍然按照顺序输出。

分析原因:

开始考虑#!/bin/sh的问题,可能是shell版本不对,于是查看当前shell

(此处记一下查看shell的命令

1、echo $SHELL

2、echo $0 ---并不是所有版本都支持

3、env | grep SHELL

4 、先ps查看进程,然后在进程中查看是何shell)

然后分析可能是循环较短,导致无法观察效果,于是将循环扩大,但仍然无用
最后将脚本循环中的&符号去掉,改为在第一个循环后加入sleep 10&
预期结果:
假设不加& 那么第一个循环执行完之后,进程将会休眠10秒,然后再执行第二个循环。
如果加上& 则休眠变成后台执行,两个循环连续输出

运行脚本,符合预期,验证成功。

但仍然不知道,为何将&放在循环后面不能够使循环后台执行。很是费解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: