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

本文通过一个简单的Shell脚本例子,探讨了如何使用&符号进行后台执行,并记录了查看当前Shell的方法。在脚本中,作者尝试让循环后台运行,但发现并未按预期进行,经过一系列分析和实验,最终验证了&符号的位置对后台执行的影响。

今天看大名鼎鼎的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秒,然后再执行第二个循环。
       如果加上& 则休眠变成后台执行,两个循环连续输出
    
     运行脚本,符合预期,验证成功。
    
但仍然不知道,为何将&放在循环后面不能够使循环后台执行。很是费解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值