嵌入式Linux shell脚本编程全面指南(含实例)

需积分: 33 7 下载量 28 浏览量 更新于2024-07-18 收藏 699KB PDF 举报
本资源是一份详细的Shell脚本编程学习笔记,针对的是嵌入式Linux环境。作者在2013年5月2日分享了他们在学习过程中积累的经验和知识,旨在帮助那些想要深入理解并掌握Shell脚本编程的人。 笔记内容涵盖了多个关键章节,包括预备知识、基础概念如shell脚本语言和文件处理、条件控制(如if-else语句、for和while循环)、循环结构(如util循环、break和continue)、函数的使用、基本命令如echo和expr、以及高级功能如select循环、菜单设计、字符串操作、数组实现、脚本调试等。每章都配以实际的程序例程,便于读者通过实践加深理解。 在编程部分,作者强调了编写shell脚本时的一些要点,如shell脚本按行解释、无需特定后缀名但推荐使用.sh以便于语法高亮、以及正确使用反单引号的重要性。此外,还提醒读者在编写完成后,需使用`chmod`命令赋予脚本执行权限。 最后,笔记还提供了习题实训和综合实例,从需求分析、系统设计到具体代码实现,帮助学习者逐步提升Shell脚本编程的实际操作能力。如果在学习过程中遇到问题,作者建议读者通过作者提供的QQ号码或加入韦东山群进行交流讨论。 这份学习笔记不仅适合初学者系统学习Shell脚本,也对有经验的开发人员提供了一次深入理解和巩固知识的机会。无论是作为参考资料还是实战指南,它都是嵌入式Linux环境下Shell编程的宝贵资源。
2018-09-23 上传
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).