- 当前环境如下,脚本内容如下:
- shell:
- root@OpenWrt:/bin# ls -al cha*
- -rwxrwxr-x 1 root root 478 Feb 3 20:29 change_list.sh
- changelist:
- drwxrwxr-x 1 root root 0 Feb 3 20:49 .
- drwxr-xr-x 1 root root 0 Feb 3 19:44 ..
- -rwxr--r-- 1 root root 67 Feb 3 20:26 test.sh
- -rwxr--r-- 1 root root 71 Feb 3 20:26 test_1.sh
- -rwxr--r-- 1 root root 59 Feb 3 20:26 test_2.sh
- root@OpenWrt:/bin#
- change_list.sh
- #!/bin/sh
- change_dir=changelist
- change_path=/bin/$change_dir
- for i in `ls $change_path`
- do
- echo applying : $i file
- $change_path/$i &
- wait
- if [[ $? = 0 ]]; then
- echo ok.
- else
- echo Failed.
- fi
- done
- test.sh
- #!/bin/sh
- echo "this is testing 1111111111111"
- sleep 5
- exit 0
- test_1.sh
- #!/bin/sh
- echo "this is testing 22222222222222222"
- sleep 1
- exit 0
- test_2.sh
- #!/bin/sh
- echo "this is testing 33333333333333"
- exit 0
在上面的change_list.sh中用的 将当前脚本放到后面然后等待后台进程去完成退出再去执行下一个,以此来实现脚本的顺序执行。
还有一种方法是将以下语句改为
- $change_path/$i &
- wait
改为:
- . $change_path/$i
Note:
两种强制顺序执行,哪一种更好呢,经过测试第一种是比较好的,不过根据环境选择合适的才是最好的。原因是第一个是多线程执行,当执行的脚本发生错误及异常退出时,后面的脚本还可以继续执行。而第二种的方法,是单线程的,只要当前执行的脚本发生错误及异常退出,相当于所有退出,后续脚本无法执行。