-
\"365个shell高级编程实例\
资源介绍
Shell脚本高级编程教程,希望对你有所帮助。
Example 10-23. Using continue N in an actual task:
1 # Albert Reiner gives an example of how to use "continue N":
2 # ---------------------------------------------------------
3
4 # Suppose I have a large number of jobs that need to be run, with
5 #+ any data that is to be treated in files of a given name pattern in a
6 #+ directory. There are several machines that access this directory, and
7 #+ I want to distribute the work over these different boxen. Then I
8 #+ usually nohup something like the following on every box:
9
10 while true
11 do
12 for n in .iso.*
13 do
14 [ "$n" = ".iso.opts" ] && continue
15 beta=${n#.iso.}
16 [ -r .Iso.$beta ] && continue
17 [ -r .lock.$beta ] && sleep 10 && continue
18 lockfile -r0 .lock.$beta || continue
19 echo -n "$beta: " `date`
20 run-isotherm $beta
21 date
22 ls -alF .Iso.$beta
23 [ -r .Iso.$beta ] && rm -f .lock.$beta
24 continue 2
25 done
26 break
27 done
28
29 # The details, in particular the sleep N, are particular to my
30 #+ application, but the general pattern is:
31
32 while true
33 do
34 for job in {pattern}
35 do
36 {job already done or running} && continue
37 {mark job as running, do job, mark job as done}
38 continue 2
39 done
40 break # Or something like `sleep 600' to avoid termination.
41 done
42
43 # This way the script will stop only when there are no more jobs to do
44 #+ (including jobs that were added during runtime). Through the use
45 #+ of appropriate lockfiles it can be run on several machines
46 #+ concurrently without duplication of calculations [which run a couple
47 #+ of hours in my case, so I really want to avoid this]. Also, as search
48 #+ always starts again from the beginning, one can encode priorities in
49 #+ the file names. Of course, one could also do this without `continue 2',
50 #+ but then one would have to actually check whether or not some job
51 #+ was done (so that we should immediately look for the next job) or not
52 #+ (in which case we terminate or sleep for a long time before checking
53 #+ for a new job).
- 上一篇: Linux常用命令手册
- 下一篇: Linux命令详解手册 英文版