shell 之顺序调用多个脚本上技巧及可能的问题

前端之家收集整理的这篇文章主要介绍了shell 之顺序调用多个脚本上技巧及可能的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. 当前环境如下,脚本内容如下:
  1. shell:
  2.  
  3. root@OpenWrt:/bin# ls -al cha*
  4. -rwxrwxr-x 1 root root 478 Feb 3 20:29 change_list.sh
  5.  
  6.  
  7. changelist:
  8. drwxrwxr-x 1 root root 0 Feb 3 20:49 .
  9. drwxr-xr-x 1 root root 0 Feb 3 19:44 ..
  10. -rwxr--r-- 1 root root 67 Feb 3 20:26 test.sh
  11. -rwxr--r-- 1 root root 71 Feb 3 20:26 test_1.sh
  12. -rwxr--r-- 1 root root 59 Feb 3 20:26 test_2.sh
  13. root@OpenWrt:/bin#
  14.  
  15. change_list.sh
  16.  
  17. #!/bin/sh
  18.  
  19. change_dir=changelist
  20. change_path=/bin/$change_dir
  21. for i in `ls $change_path`
  22. do
  23. echo applying : $i file
  24. $change_path/$i &
  25. wait
  26. if [[ $? = 0 ]]; then
  27. echo ok.
  28. else
  29. echo Failed.
  30. fi
  31. done
  32.  
  33. test.sh
  34.  
  35. #!/bin/sh
  36. echo "this is testing 1111111111111"
  37. sleep 5
  38. exit 0
  39.  
  40. test_1.sh
  41.  
  42. #!/bin/sh
  43. echo "this is testing 22222222222222222"
  44. sleep 1
  45. exit 0
  46.  
  47. test_2.sh
  48.  
  49. #!/bin/sh
  50. echo "this is testing 33333333333333"
  51. exit 0

在上面的change_list.sh中用的 将当前脚本放到后面然后等待后台进程去完成退出再去执行下一个,以此来实现脚本的顺序执行。

还有一种方法是将以下语句改为

  1. $change_path/$i &
  2. wait

改为:

  1. . $change_path/$i

Note:

两种强制顺序执行,哪一种更好呢,经过测试第一种是比较好的,不过根据环境选择合适的才是最好的。原因是第一个是多线程执行,当执行的脚本发生错误及异常退出时,后面的脚本还可以继续执行。而第二种的方法,是单线程的,只要当前执行的脚本发生错误及异常退出,相当于所有退出,后续脚本无法执行。

猜你在找的Bash相关文章