linux shell 高级编程,shell高级编程(带365个实例源码)

变量重游

9.1. 内部变量

9.2. 操作字符串

9.3. 参数替换

9.4. 指定类型的变量:declare 或者typeset

9.5. 变量的间接引用

9.6. $RANDOM: 产生随机整数

9.7. 双圆括号结构

10. 循环和分支

10.1. 循环

10.2. 嵌套循环

10.3. 循环控制

10.4. 测试与分支(case 和select 结构)

11. 内部命令与内建

11.1. 作业控制命令

12. 外部过滤器,程序和命令

12.1. 基本命令

12.2. 复杂命令

12.3. 时间/日期命令

12.4. 文本处理命令

12.5. 文件与归档命令

12.6. 通讯命令

12.7. 终端控制命令

12.8. 数学计算命令

12.9. 混杂命令

13. 系统与管理命令

13.1. 分析一个系统脚本

14. 命令替换

15. 算术扩展

16. I/O 重定向

16.1. 使用exec

16.2. 代码块的重定向

16.3. 应用

17. Here Documents

17.1. Here Strings

18. 休息时间

Part 4. 高级

19. 正则表达式

19.1. 一个简要的正则表达式介绍

19.2. 通配

20. 子shell

(Subshells)

21. 受限shell(Restricted Shells)

22. 进程替换

23. 函数

23.1. 复杂函数和函数复杂性

23.2. 局部变量

23.3. 不使用局部变量的递归

24. 别名(Aliases)

25. 列表结构

26. 数组

27. /dev 和 /proc

27.1. /dev

27.2. /proc

28. 关于Zeros 和Nulls

29. 调试

30. 选项

31. Gotchas

32. 脚本编程风格

32.1. 非官方的Shell 脚本风格

33. 杂项

33.1. 交互式和非交互式的shells 和脚本

33.2. Shell 包装

33.3. 测试和比较: 另一种方法

33.4. 递归

33.5. 彩色脚本

33.6. 优化

33.7. 各种小技巧

33.8. 安全话题

33.8.1. 被感染的脚本

33.8.2. 隐藏Shell 脚本源码

33.9. 移植话题

33.10. 在Windows 下进行Shell 编程

34. Bash, 版本 2 和 3

34.1. Bash, 版本2

34.2. Bash, 版本3

35. 后记

35.1. 作者后记

35.2. 关于作者

35.3. 哪里可以取得帮助?

35.4. 制作这本书的工具

35.4.1. 硬件

35.4.2. 软件和排版软件

35.5. Credits

Bibliography

A. Contributed Scripts

B. Reference Cards

C. A Sed and Awk Micro-Primer

C.1. Sed

C.2. Awk

D. Exit Codes With Special Meanings

E. A Detailed Introduction to I/O and I/O Redirection

F. Standard Command-Line Options

G. Important Files

H. Important System Directories

I. Localization

J. History Commands

K. A Sample .bashrc File

L. Converting DOS Batch Files to Shell Scripts

M. Exercises

M.1. Analyzing Scripts

M.2. Writing Scripts

N. Revision History

O. Mirror Sites

P. To Do List

Q. Copyright

表格清单:

11-1. 作业标识符

30-1. Bash 选项

33-1. 转义序列中数值和彩色的对应

B-1. Special Shell Variables

B-2. TEST Operators: Binary Comparison

B-3. TEST Operators: Files

B-4. Parameter Substitution and Expansion

B-5. String Operations

B-6. Miscellaneous Constructs

C-1. Basic sed operators

C-2. Examples of sed operators

D-1. "Reserved" Exit Codes

L-1. Batch file keywords / variables / operators, and their shell equivalents

L-2. DOS commands and their UNIX equivalents

N-1. Revision History

例子清单:

2-1. 清除:清除/var/log 下的log 文件

2-2. 清除:一个改良的清除脚本

2-3. cleanup:一个增强的和广义的删除logfile 的脚本

3-1. 代码块和I/O 重定向

3-2. 将一个代码块的结果保存到文件

3-3. 在后台运行一个循环

3-4. 备份最后一天所有修改的文件.

4-1. 变量赋值和替换

4-2. 一般的变量赋值

4-3. 变量赋值,一般的和比较特殊的

4-4. 整型还是string?

4-5. 位置参数

4-6. wh,whois 节点名字查询

4-7. 使用shift

5-1. echo 一些诡异的变量

5-2. 转义符

6-1. exit/exit 状态

6-2. 否定一个条件使用!

7-1. 什么情况下为真?

7-2. 几个等效命令test,/usr/bin/test,[],和/usr/bin/[

7-3. 算数测试使用(( ))

7-4. test 死的链接文件

7-5. 数字和字符串比较

7-6. 测试字符串是否为null

7-7. zmore

8-1. 最大公约数

8-2. 使用算术操作符

8-3. 使用&&和||进行混合状态的test

8-4. 数字常量的处理

9-1. $IFS 和空白

9-2. 时间输入

9-3. 再来一个时间输入

9-4. Timed read

9-5. 我是root?

9-6. arglist:通过$*和$@列出所有的参数

9-7. 不一致的$*和$@行为

9-8. 当$IFS 为空时的$*和$@

9-9. 下划线变量

9-10. 在一个文本文件的段间插入空行

9-11. 利用修改文件名,来转换图片格式

9-12. 模仿getopt 命令

9-13. 提取字符串的一种可选的方法

9-14. 使用参数替换和error messages

9-15. 参数替换和"usage"messages

9-16. 变量长度

9-17. 参数替换中的模式匹配

9-18. 重命名文件扩展名

9-19. 使用模式匹配来分析比较特殊的字符串

9-20. 对字符串的前缀或后缀使用匹配模式

9-21. 使用declare 来指定变量的类型

9-22. 间接引用

9-23. 传递一个间接引用给awk

9-24. 产生随机数

9-25. 从一副扑克牌中取出一张随机的牌

9-26. 两个指定值之间的随机数

9-27. 使用随机数来摇一个骰子

9-28. 重新分配随机数种子

9-29. 使用awk 产生伪随机数

9-30. C 风格的变量处理

10-1. 循环的一个简单例子

10-2. 每个[list]元素带两个参数的for 循环

10-3. 文件信息:对包含在变量中的文件列表进行操作

10-4. 在for 循环中操作文件

10-5. 在for 循环中省略[list]

10-6. 使用命令替换来产生for 循环的[list]

10-7. 对于二进制文件的一个grep 替换

10-8. 列出系统上的所有用户

10-9. 在目录的所有文件中查找源字串

10-10. 列出目录中所有的符号连接文件

10-11. 将目录中的符号连接文件名保存到一个文件中

10-12. 一个C 风格的for 循环

10-13. 在batch mode 中使用efax

10-14. 简单的while 循环

10-15. 另一个while 循环

10-16. 多条件的while 循环

10-17. C 风格的while 循环

10-18. until 循环

10-19. 嵌套循环

10-20. break 和continue 命令在循环中的效果

10-21. 多层循环的退出

10-22. 多层循环的continue

10-23. 在实际的任务中使用"continue N"

10-24. 使用case

10-25. 使用case 来创建菜单

10-26. 使用命令替换来产生case 变量

10-27. 简单字符串匹配

10-28. 检查是否是字母输入

10-29. 用select 来创建菜单

10-30. 用函数中select 结构来创建菜单

11-1. 一个fork 出多个自己实例的脚本

11-2. printf

11-3. 使用read,变量分配

11-4. 当使用一个不带变量参数的read 命令时,将会发生什么?

11-5. read 命令的多行输入

11-6. 检测方向键

11-7. 通过文件重定向来使用read

11-8. 管道输出到read 中的问题

11-9. 修改当前的工作目录

11-10. 用"let"命令来作算术操作.

11-11. 显示eval 命令的效果

11-12. 强制登出(log-off)

11-13. 另一个"rot13"的版本

11-14. 在Perl 脚本中使用eval 命令来强制变量替换

11-15. 使用set 来改变脚本的位置参数

11-16. 重新分配位置参数

11-17. Unset 一个变量

11-18. 使用export 命令传递一个变量到一个内嵌awk 的脚本中

11-19. 使用getopts 命令来读取传递给脚本的选项/参数.

11-20. "Including"一个数据文件

11-21. 一个没什么用的,source 自身的脚本

11-22. exec 的效果

11-23. 一个exec 自身的脚本

11-24. 在继续处理之前,等待一个进程的结束

11-25. 一个结束自身的脚本.

12-1. 使用ls 命令来创建一个烧录CDR 的内容列表

12-2. Hello or Good-bye

12-3. 删除当前目录下文件名中包含一些特殊字符(包括空白)的文件..

12-4. 通过文件的 inode 号来删除文件

12-5. Logfile: 使用 xargs 来监控系统 log

12-6. 把当前目录下的文件拷贝到另一个文件中

12-7. 通过名字Kill 进程

12-8. 使用xargs 分析单词出现的频率

12-9. 使用 expr

12-10. 使用 date 命令

12-11. 分析单词出现的频率

12-12. 那个文件是脚本?

12-13. 产生10 进制随机数

12-14. 使用 tail 命令来监控系统log

12-15. 在一个脚本中模仿 "grep" 的行为

12-16. 在1913 年的韦氏词典中查找定义

12-17. 检查列表中单词的正确性

12-18. 转换大写: 把一个文件的内容全部转换为大写.

12-19. 转换小写: 将当前目录下的所有文全部转换为小写.

12-20. Du: DOS 到 UNIX 文本文件的转换.

12-21. rot13: rot13, 弱智加密.

12-22. Generating "Crypto-Quote" Puzzles

12-23. 格式化文件列表.

12-24. 使用 column 来格式化目录列表

12-25. nl: 一个自己计算行号的脚本.

12-26. manview: 查看格式化的man 页

12-27. 使用 cpio 来拷贝一个目录树

12-28. 解包一个 rpm 归档文件

12-29. 从 C 文件中去掉注释

12-30. Exploring /usr/X11R6/bin

12-31. 一个"改进过"的 strings 命令

12-32. 在一个脚本中使用 cmp 来比较2 个文件.

12-33. basename 和 dirname

12-34. 检查文件完整性

12-35. Uudecod 编码后的文件

12-36. 查找滥用的连接来报告垃圾邮件发送者

12-37. 分析一个垃圾邮件域

12-38. 获得一份股票报价

12-39. 更新 Fedora Core 4

12-40. 使用 ssh

12-41. 一个可以mail 自己的

...展开收缩

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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).

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值