高级Bash脚本编程指南

深入探索shell脚本的艺术

门德尔·库珀

10

2014年3月10日

修订历史记录
6.5版2012年4月5日修订人:mc
“TUNGSTENBERRY”版本
版本6.62012年11月27日修订人:mc
“YTTERBIUMBERRY”版本
修订版102014年3月10日修订人:mc
“PUBLICDOMAIN”版本

本教程假设您之前不了解脚本或编程,但进展迅速中级/高级教学. . . 全部的在潜入小金块的时候UNIX系统®智慧和学识.它作为教科书、自学手册、参考和关于shell脚本技术的知识来源。练习以及大量推荐的示例,鼓励读者积极参与,前提是真正学习的唯一途径脚本是编写脚本.

这本书适合课堂使用编程概念的一般介绍。

本文件特此授予公共领域。没有版权!


奉献

对安妮塔来说,一切魔力的源泉

目录
第1部分:。介绍
1Shell编程!
2从沙邦开始
第2部分。基础
三。特殊字符
4变量和参数简介
5报价
6退出和退出状态
7测验
8操作和相关主题
第3部分。超越基础
9再看变量
10操纵变量
11回路和分支
12命令替换
13算术展开
14休息时间
第4部分。命令
15内部命令和内置程序
16外部过滤器、程序和命令
17系统和管理命令
第5部分。高级主题
18正则表达式
19此处为文档
20I/O重定向
21支壳层
22受限外壳
23流程替换
24功能
25别名
26列出构件
27阵列
28间接引用
29/开发/程序
30网络编程
31零和空
32调试
33选项
34哥查斯
35使用样式编写脚本
36杂项
37Bash,版本2、3和4
38尾注
38.1.作者注释
38.2.关于作者
38.3.到哪里寻求帮助
38.4.用于制作本书的工具
38.5.信用
38.6.免责声明
参考文献
答:。贡献的脚本
B。参考卡
C、。Sed and Awk微型引物
C.1、。赛德
C.2、。Awk公司
D。分析和管理路径名
E.公司。具有特殊含义的出口代码
F、。I/O和I/O重定向的详细介绍
G.公司。命令行选项
政府1。标准命令行选项
G.2、。Bash命令行选项
H。重要文件
一、。重要系统目录
J。可编程完井简介
K。本地化
L。历史记录命令
M。样品.bashrc.bash_配置文件文件夹
N。将DOS批处理文件转换为Shell脚本
O。练习
O.1、。分析脚本
O.2、。编写脚本
第页。修订历史记录
问:。下载和镜像站点
R。待办事项列表
美国。版权
T。ASCII表
索引
表格列表
8-1.操作员优先级
15-1.作业标识符
33-1.Bash选项
36-1.表示转义序列中颜色的数字
B-1。特殊外壳变量
B-2。TEST运算符:二进制比较
B-3。测试操作员:文件
B-4。参数替换和扩展
B-5。字符串操作
B-6。其他构造
C-1。基本sed运算符
C-2。sed运算符示例
E-1。保留退出代码
N-1。批处理文件关键字/变量/运算符及其shell等效项
N-2。DOS命令及其UNIX等效命令
第1页。修订历史记录
示例列表
2-1.清理:清理日志的脚本/var/log中的文件
2-2.清理:改进了清理脚本
2-3.清理:增强型以及上述脚本的通用版本。
3-1.代码块和I/O重定向
3-2.将代码块的输出保存到文件
3-3.在后台运行循环
3-4.备份最后一天更改的所有文件
4-1.变量赋值和替换
4-2.普通变量赋值
4-3.变量赋值,简单明了
4-4所示。整数还是字符串?
4-5.位置参数
4-6.世界卫生组织,谁是域名查找
4-7.使用转移
5-1.回应奇怪的变量
5-2。转义字符
5-3.检测按键提示
6-1.退出/退出状态
6-2.使用否定条件!
7-1.真相是什么?
7-2.的等效性测试,/usr/bin/test,[],/usr/bin(用户/二进制)/[
7-3.算术测试使用(( ))
7-4.测试断开的链接
7-5.算术和字符串比较
7-6.测试字符串是否无效的
7-7.兹莫尔
8-1.最大公约数
8-2.使用算术运算
8-3.使用&&和进行复合条件测试||
8-4。数值常数的表示
8-5.C型变量操作
9-1.$IFS和空白
9-2.定时输入
9-3.再次定时输入
9-4.定时阅读
9-5.我是根吗?
9-6.参数列表:列出参数带$*和$@
9-7.不一致的$*$@行为
9-8.$*$@什么时候$国际单项体育联合会为空
9-9.下划线变量
9-10.使用声明键入变量
9-11.生成随机数
9-12.从牌堆中随机选取一张牌
9-13.布朗运动模拟
9-14.值之间随机
9-15.使用RANDOM滚动单个模具
9月16日。重新播种RANDOM
9-17.伪随机数,使用awk公司
10-1.在文本文件的段落之间插入空行
10-2.生成8个字符“随机”一串
10-3.转换图形文件格式,并更改文件名
10-4.将流式音频文件转换为洛格
10-5.仿真获得选择权
10-6.提取和定位子字符串的替代方法
10-7.使用参数替换和错误消息
10-8之间。参数替换和“用法”信息
10-9.变量的长度
10-10.参数替换中的模式匹配
10-11.重命名文件扩展名:
10-12.使用模式匹配分析任意字符串
10-13.字符串前缀或后缀处的匹配模式
11-1.简单对于循环
11-2.对于每个循环中有两个参数[list]元素
11-3.文件信息:对文件列表进行操作包含在变量中
11月4日。在参数化文件列表上操作
11-5.使用对于
11-6.缺少在[列表]中在一个对于
11-7.正在生成[列表]在里面对于带命令替换的循环
11-8.A类格雷普更换用于二进制文件
11-9.列出系统上的所有用户
11-10.正在检查目录中的所有二进制文件作者
11-11.列出象征的链接在目录中
11-12.保存到文件的目录中的符号链接
11-13.C型对于
11-14.使用默认值以批处理模式
11-15.简单虽然
11-16.另一个虽然
11-17.虽然具有多个条件的循环
11-18.中的C样式语法虽然
11-19.直到
11-20.嵌套循环
11-21.的影响打破持续在循环中
11-22.打破多个循环级别
11-23.在更高的循环级别继续
11月24日。使用继续N在实际任务中
11-25.使用案例
11-26.使用创建菜单案例
11-27.使用命令替换生成案例变量
11-28.简单字符串匹配
11-29.检查字母输入
11-30.使用创建菜单选择
11-31.使用创建菜单选择在函数中
12-1.愚蠢的脚本技巧
12-2.从循环生成变量
12-3.查找字谜
15-1.生成自身多个实例的脚本
15-2.打印在行动中
15-3.变量赋值,使用阅读
15-4.阅读没有变量
15-5.多线输入到阅读
15-6.检测箭头键
15-7.使用阅读具有文件重定向
15-8.从管道读取时出现问题
15-9.更改当前工作目录
15-10.出租做算术。
15-11.显示的效果评估
15-12.使用评估选择变量之间
15-13。回声这个命令行参数
15-14.强制注销
15-15.的一个版本旋转13
15-16.使用设置具有位置参数
15-17.反转位置参数
15-18页。重新指定位置参数
15-19.“取消设置”变量
15-20.使用出口将变量传递给嵌入的awk公司脚本
15-21.使用格托普茨阅读传递给脚本的选项/参数
15-22.“包括”数据文件
15-23.源代码本身的(无用的)脚本
15-24.的影响执行官
15-25.一个脚本执行官的它本身
15-26.等待进程完成后再继续
15-27.一个自杀的脚本
16-1.使用最小二乘法创建目录用于燃烧指挥官磁盘
16-2.你好还是再见
16-3.坏名字,删除文件名在当前目录中包含错误字符和空白.
16-4.通过其删除文件索引节点
16-5.日志文件:使用参数代换监视系统日志
16-6.正在将当前目录中的文件复制到另一个目录
16-7.按名称终止进程
16-8.词频分析使用参数代换
16-9.使用快递
16-10.使用日期
16-11.日期计算
16-12.词频分析
16-13.哪些文件是脚本?
16-14.生成10位随机数
16-15.使用监视系统日志
16-16.打印出发件人中的行存储的电子邮件
16-17之间。仿真格雷普在脚本中
16-18.纵横字谜求解器
16-19.在韦伯斯特1913年字典中查找定义
16-20.检查列表中单词的有效性
16-21.拖鞋:转换文件全部大写。
16-22.小写字母:全部更改工作目录中的文件名变为小写。
16-23.:DOS到UNIX文本文件转换。
16-24.旋转13:超弱加密。
16-25.生成“加密报价”拼图
16-26.格式化文件列表。
16-27.使用格式化目录上市
16-28.荷兰:自动编号脚本。
16-29.人视图:查看格式化的手册页
16-30.使用备份文件移动目录树
16-31.打开包装每分钟转数档案文件
16-32.从C程序文件中删除注释
16-33.探索/usr/X11R6/bin
16-34.“改进” 命令
16-35.使用化学机械抛光比较两个文件在脚本中。
16-36.基名目录名
16-37.分段复制自身的脚本
16-38之间。检查文件完整性
16-39.Uudecoding编码文件
16-40.找出举报垃圾邮件发送者的位置
16-41.分析垃圾邮件域
16-42.获取股票报价
16-43.更新FC4
16-44.使用ssh标准
16-45.发送自己的脚本
16-46.生成质数
16-47.按揭每月付款
16-48.基本转换
16-49.正在调用公元前使用在这里文件
16-50.计算PI
16-51.将十进制数转换为十六进制数
16-52.保理
16-53.计算三角形的斜边
16-54.使用序列生成循环论据
16-55.字母计数“
16-56.使用获得选择权解析命令行选项
16-57.复制自身的脚本
16-58.锻炼
16-59之间。捕获按键
16-60.为准备可引导SD卡树莓派
16-61.安全删除文件
16-62.文件名生成器
16-63.将米转换为英里
16-64.使用4米
17-1.设置新密码
17-2.设置擦除性格
17-3.秘密密码:关闭终端回声
17-4.按键检测
17-5.检查远程服务器标识
17-6.皮多夫有助于终止进程
17-7.检查CD映像
17-8.在文件中创建文件系统
17-9.添加新硬盘
17-10.使用乌马斯克隐藏输出文件从窥探的眼睛
17-11.背光:更改(笔记本电脑)屏幕背光的亮度
第17-12页。基勒,来自/等/rc.d/init。d日
19-1.广播:向每个人发送消息已登录
19-2.dummy文件:创建双线虚拟对象文件
19-3所示。多行消息使用
19-4.多行消息,不显示制表符
19-5.此处提供可替换参数的文档
19-6.将文件对上载到Sunsite公司进来的目录
19-7.参数替换已关闭
19-8.生成另一个脚本的脚本
19-9.此处为文档和函数
19-10.“匿名”此处文档
19-11.注释掉代码块
19-12.一个自我记录的脚本
19-13.在文件前添加一行
19-14.分析邮箱
20-1.重定向标准输入使用执行官
20-2.重定向标准输出使用执行官
20-3.重定向两者标准输入标准输出在与相同的脚本中执行官
20-4.避开子壳
20-5.已重定向虽然
20-6.重定向的替代形式虽然
20-7.已重定向直到
20-8之间。已重定向对于
20-9.已重定向对于回路(两个标准输入标准输出重定向)
20-10.已重定向如果/然后测试
20-11.数据文件名称.数据对于上面的示例
20-12.记录事件
21-1.子shell中的变量范围
21-2.列出用户配置文件
21-3.在子shell中运行并行进程
22-1.在受限模式下运行脚本
23-1.无分叉的代码块重定向
23-2.重定向的输出过程替代进入循环。
24-1.简单的功能
24-2.函数获取参数
24-3.传递给脚本的函数和命令行参数
24-4.将间接引用传递给函数
24-5.取消对传递给函数的参数的引用
24-6.同样,取消对传递给函数的参数的引用
24小时至7小时。最多两个数字
24-8.将数字转换为罗马数字
24-9.测试函数中的大返回值
24-10.比较两个大整数
24-11.用户名的实名
24-12.局部变量可见性
24-13.简单递归函数的演示
24-14.另一个简单的演示
24-15.递归,使用局部变量
24-16.斐波那契数列
24-17之间。河内塔
25-1.脚本中的别名
25-2.尤尼亚斯:设置和取消设置别名
26-1.使用和列表进行测试对于命令行参数
26-2.另一个命令行参数测试使用列表
26-3.使用或列表在组合中带有和列表
27-1.简单的阵列使用
27-2.格式化诗歌
27-3.各种阵列操作
27-4.数组上的字符串操作
27-5.将脚本的内容加载到数组中
27-6.数组的一些特殊性质
27-7.空数组和空元素
27-8.初始化数组
27-9.复制和连接阵列
27-10.有关串联阵列的更多信息
27-11.气泡排序
27-12.嵌入式数组和间接引用
27-13.埃拉托西尼筛
27-14.埃拉托西尼筛,优化
27-15.模拟下推堆栈
27日至16日。复杂阵列应用:探索一个奇怪的数学系列
27-17.模拟二维阵列,然后倾斜它
28-1.间接变量引用
28-2.将间接引用传递给awk公司
29-1之间。使用/开发/tcp对于故障排除
29-2.播放音乐
29-3.查找与PID关联的进程
29-4.在线连接状态
30-1.打印服务器环境
30-2.IP地址
31-1.隐藏饼干罐
31-2.使用设置swapfile/偏差/零
31-3.创建ramdisk
32-1.错误脚本
32-2所示。缺少关键字
32-3.测试24:另一个错误脚本
32-4.使用测试条件断言
32-5.出口陷阱
32-6.清理后正文结束字符
32-7.进度条的简单实现
32-8.跟踪变量
32-9.运行多个进程(在SMP设备上)
34-1.数值和字符串比较不等效
34-2.子壳陷阱
34-3.管道输出回声阅读
36-1.外壳包装器
36-2.稍微复杂一点包装器
36-3.通用外壳包装器那个写入日志文件
36-4.A类外壳包装器绕着一个awk脚本
36-5.A类外壳包装器围绕另一个awk脚本
36-6。Perl嵌入到猛击脚本
36-7.Bash和Perl脚本的组合
36-8.Python嵌入到猛击脚本
36-9.一个会说话的脚本
36-10.递归调用自己的(无用的)脚本
36-11.递归调用自身的(有用的)脚本
36-12.另一个递归调用自身的(有用的)脚本
36-13.A类“彩色”地址数据库
36-14.绘制方框
36-15.回显彩色文本
36-16.A类“赛马”游戏
36-17.进度条
36-18.返回值欺骗
36-19.更大的回报
36-20.传递和返回数组
36-21.字谜妙趣横生
36-22.从shell脚本调用的小部件
36-23.测试套件
37-1.字符串扩展
37-2.间接变量引用-新方法
37-3.简单数据库应用程序,使用间接变量引用
37-4.使用数组和其他各种技巧从一副牌中随机发四手牌
37-5.一个简单的地址数据库
37-6.一个更精细的地址数据库
37-7.测试字符
37-8.读取N个字符
37-9.使用此处文档设置变量
37-10.管道输入到阅读
37-11.负数组索引
37-12.字符串提取中的负参数建造
答:。邮件格式:格式化电子邮件消息
答2。尼泊尔:简单的文件重命名效用
答3。空白-重命名:重命名包含空白
答:4。加密密码:上传到ftp站点,使用本地加密密码
答:5。副本cd:复制数据CD
答-6。Collatz系列
答-7。介于之间的天数:两天之间日期
答-8。制作词典
答-9。Soundex转换
A-10。生活的游戏
答-11:。的数据文件生活的游戏
答-12。斩首:删除邮件和新闻消息标题
答13。密码:生成随机8个字符的密码
A-14。外国直接投资基金:进行每日备份,使用命名管道
答15。使用模运算符生成素数
答16。:显示目录树
答17:。树2:备用目录树脚本
答18:。字符串函数:C样式字符串函数
答19:。目录信息
答-20。哈希函数库
答-21。使用哈希函数对文本着色
答-22。有关哈希函数的更多信息
答-23。安装USB钥匙链存储设备
答-24。转换为HTML
答-25。保留日志
答-26。保护文字字符串
A-27之间。取消保护文字字符串
答-28。垃圾邮件发送者识别
答-29。垃圾邮件搜索
答-30。制作wget公司易于使用
答-31。A类播客脚本
答-32。夜间备份到firewire HD
答-33。扩展的光盘命令
答-34。声卡设置脚本
答-35。在文本文件中定位分割段落
答-36。插入排序
答-37。标准偏差
答-38。A类衬垫共享软件的文件生成器作者
答-39。A类手册页编辑
答-40。玫瑰周围的花瓣
答-41。Quacky:一款Perquackey-type文字游戏
答-42。尼姆
A-43之间。命令行秒表
答-44。通用shell脚本作业分配解决方案
答-45。骑士之旅
A-46。魔术方块
答-47。十五个谜题
A-48。河内塔,图片版本
答-49。河内塔,替代图形版本
答:50。的替代版本getopt-simple.sh脚本
答-51。的版本使用GetOpt.sh中使用的示例选项卡扩展附录
A-52。在所有可能的颜色背景中循环
答-53。莫尔斯电码实践
答-54。Base64编码/解码
A-55。使用在文件中插入文本塞德
答-56。格伦斯菲尔德密码
A-57页。宾果数字生成器
答-58。已复习基础知识
答-59。测试各种命令的执行时间
答-60。关联阵列与传统阵列(执行次)
C-1。计算信件发生次数
J-1。的完成脚本使用GetOpt.sh
M-1。样品.bashrc文件
M-2。.bash_配置文件文件
N-1。视图数据。BAT:DOS批处理文件
N-2。查看数据.sh:Shell脚本转换VIEWDATA的。BAT公司
T-1。生成ASCII表的脚本
T-2。另一个ASCII表脚本
T-3。第三个ASCII表脚本,使用awk公司