BourneShell与Shell编程基础教程

需积分: 10 6 下载量 103 浏览量 更新于2024-07-24 收藏 563KB PDF 举报
"这篇文档是关于BourneShell和shell编程的一个实例教程,由何斌武制作,来源于大连理工大学的LINUX选修课讲义。文档涵盖了BourneShell的基础知识、shell编程、条件测试、循环控制以及shell的定制等主题,并提供了相关UNIX上的shell选项和特殊字符的介绍。" 在BourneShell介绍部分,我们了解到这是由Stephen Bourne在贝尔实验室开发的一种基础shell,它具有很多有用的特性。shell编程与组织的内容包括了对shell的基础概念的阐述,比如环境设置、选项配置、特殊字符的使用,以及用户定义变量、环境变量和位置变量(shell参数)的讲解。 shell的基础部分强调了几个关键概念: 1. **环境**:环境变量如`/etc/passwd`文件中的信息,以及`$HOME/.profile`文件用于个性化用户的shell环境。`$`作为提示符,`/etc/profile`和用户的`.profile`文件则用于初始化环境。 2. **选项**:shell执行时可以使用各种选项来改变其行为,例如`-n`用于测试脚本的语法,`-x`开启命令行追踪,`-i`用于交互式模式,`-e`使未定义变量的使用成为错误等。这些选项可以组合使用,但某些可能相互冲突。 3. **特殊字符**:shell中的特殊字符如`$`, `!`, `*`, `?`, `|`, `&`, `;`, `(`, `)`等,它们在命令行解析和脚本编写中扮演重要角色,用于变量引用、命令分隔、管道操作等。 在shell编程部分,讲解了: 1. **shell变量**:包括用户自定义变量、环境变量(全局,可供所有程序使用)和位置变量,它们是shell脚本中的核心元素,用于存储数据和控制流程。 2. **条件测试**:允许脚本根据特定条件执行不同分支,例如用`if`语句和相关的测试命令如`[`或`test`进行逻辑判断。 3. **循环及重复控制**:使用`for`, `while`, `until`等循环结构实现重复执行代码块的功能。 4. **shellscript编程**:编写包含一系列命令的脚本文件,通过赋予执行权限并调用运行,可以实现自动化任务。 此外,文档还提到了**shell定制**,这通常涉及到自定义shell提示符、修改shell行为、以及设置个人的shell函数和别名,以提高工作效率。 这个文档为学习BourneShell和shell编程提供了一个全面的实践导向的教程,适合初学者了解和掌握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).