小言_互联网的博客

《Linux命令行大全》第2版来啦!这一版做了哪些更新?

277人阅读  评论(0)

《Linux命令行大全》第2版是一本什么样的书

这是一本全面讲述Linux命令行用法的图书。本书从更广泛的意义上向你传授如何使用CLI、CLI工作原理、CLI都有哪些功能,以及最佳实践是什么。

这不是一本有关Linux操作系统管理的图书。任何关于命令行的严肃讨论都会不可避免地转向操作系统管理方面的话题,本书仅触及少数管理问题。为了让你能开展后续的学习,本书提供了坚实的命令行基础知识,这可是完成重要的系统管理任务必不可少的工具。

本书以Linux为中心,只讨论当前的Linux发行版。尽管本书95%的内容对其他类UNIX系统用户也有帮助,但本书主要还是面向目前的Linux命令行用户。

 

第2版中的新内容

尽管基本结构和内容保持不变,但第2版其实做了各种改善、更新,并与时俱进,其中有很多是基于读者的反馈。除此之外,还有两处特别的改进。首先,本书现在假定使用Bash 4.x,该版本在初稿时并未广泛使用。Bash的4.x版添加了一些新特性,我们自然不会错过。其次,对本书第四部分进行了更新,提供了更好的脚本实践示例。第四部分中包含的脚本已经做出了修订,以使其更加稳健,同时我还修复了其中的几处错误。

为什么使用命令行

你有没有注意到,电影里的“超级黑客”(就是那些用不了半分钟就能侵入极为安全的计算机的人)端坐在计算机前时,从来都没碰过鼠标?这是因为制片人清楚,作为人类,我们从本能上就知道,要想在计算机上真正“搞定一切”的方式就是通过键盘输入命令!

如今的大多数计算机用户只熟悉图形用户界面(Graphical User Interface,GUI),甚至少数厂商和专家说命令行界面(Command Line Interface,CLI)是过去的玩意儿。这真遗憾,良好的CLI是一种极富表达力的人机交互方式,就像人们之间的书信交流一样。“GUI使简单的任务更简单,而CLI使完成艰难的任务成为可能。”这句话放到今天仍然正确。

由于Linux操作系统参照了UNIX系列操作系统,因此分享了UNIX丰富的命令行工具。UNIX操作系统在20世纪80年代早期就占据了主流地位(尽管它在20世纪70年代才被开发出来),GUI在当时尚未被广泛采用,因此诞生了大量的CLI。事实上,Linux的早期实践者选择Linux而非Windows NT的主要原因之一就是,其强大的CLI使“完成艰难的任务成为可能”。

学习本书的你

本书适合从其他操作系统转向Linux的新用户。你很可能曾是某一版Windows的“高手”;也可能是老板让你去管理Linux服务器,或是自己走进了像树莓派这样的单板计算机(Single Board Computer,SBC)的神奇新世界;又或者是厌烦了各种安全问题的桌面用户,想要体验Linux操作系统。这都无妨,欢迎阅读。

话虽如此,但万事开头难,学习命令行也不例外。学习命令行是一项挑战,需要付出辛勤的汗水。这倒不是说它有多难,而是它涵盖的内容着实广泛。在普通的Linux操作系统中,能够在命令行上使用的程序数以千计,这毫不夸张。先提醒你自己,学习命令行可不是件容易的事。

然而,学习Linux命令行所带来的回报颇丰。如果你觉得自己是“高手”,那么先等一等吧。你对真正的“力量”还一无所知。而且,不考虑其他的计算机技能,命令行知识是经久不衰的。你今天学到的知识在10年后仍旧管用。命令行知识经受得住时间的考验。

如果你没有编程经验,也不用担心,依然可以从本书开始学起。

《Linux命令行大全》第2版内容结构

本书的内容经过精心编排,阅读时你会感觉就像有一位老师坐在身旁手把手地指导你。许多作者可能采用系统化的方法来讲解书中的内容。从我的角度来讲,这很合理,但是对初学者而言,可能会让人摸不着头脑。

本书的另一个目标是让你熟悉UNIX的思考方式,它不同于Windows的思考方式。在此过程中,我们还会帮助你理解命令行的工作原理和方式。Linux不仅仅是一个软件,还是庞大的UNIX文化中的一小部分,有自己的语言和历史。

本书包括4个部分,每一部分都涵盖了命令行不同方面的知识。

· 第一部分:学习Shell。这部分开启命令行基础知识的学习之旅,包括命令结构、浏览文件系统、编辑命令行以及查找命令帮助和文档。

· 第二部分:配置与环境。这部分讲述编辑配置文件,如何通过命令行的方式控制计算机操作。

· 第三部分:常见任务与必备工具。这部分探讨很多在命令行上执行的常规任务。类UNIX系统,例如Linux,包含大量“经典的”命令行程序,可用于对数据执行强有力的操作。

· 第四部分:编写Shell脚本。这部分介绍Shell编程,它是一项公认的基础技术,但并不难学,很多常见计算任务能借助其实现自动化。通过学习Shell编程,你会熟悉一些同样能够应用于其他编程语言中的概念。

学习之前你需要的预备知识

为了阅读本书,你只需要安装好Linux操作系统。可以通过下列任意一种方式实现。

在计算机(不用是最新的)上安装Linux。无论选择哪个Linux发行版都没有问题,不过大多数人会从Ubuntu、Fedora、OpenSUSE中选择。如果你拿不准,就先试一试Ubuntu。安装现代Linux发行版时,由于硬件配置不同,要么简单至极,要么难得令人发指。建议采用近两年的桌面计算机,至少配备2GB的内存和6GB的空闲磁盘空间。尽可能避免使用笔记本计算机和无线网络,因为这二者经常难以正常工作。

使用LiveCD或U盘。许多Linux发行版有一个挺酷的功能,你可以直接通过CD-ROM或U盘运行Linux,完全不用安装。只需进入BIOS设置界面,将计算机设为从CD-ROM或USB设备启动,然后重启即可。使用这种方法可以在安装之前很好地测试硬件兼容性。缺点在于相较于在硬盘上安装的Linux,运行速度会比较慢。Ubuntu和Fedora(以及其他发行版)都有LiveCD版本。

不管你用哪种方式安装Linux,都会偶尔需要超级用户(也就是管理员)权限来完成本书中的某些任务。

安装好之后,就可以边读边练习了。本书的大部分内容需要你“亲自动手”学习。

为什么没有采用“GNU/Linux”的称谓


在某些群体中,将Linux操作系统称为“GNU/Linux操作系统”。其实不存在哪种称呼“Linux”的方式完全正确,因为它是由遍布世界各地的开发人员共同造就的。从技术层面来讲,Linux只是操作系统内核的名称,仅此而已。内核自然非常重要,没有它,操作系统就无法运转,但是它并不足以构成一个完整的操作系统。

理查德·马修·斯托曼是一位“天才哲学家”。他发起自由软件运动,成立了自由软件基金会,创建了自由软件项目并编写了GNU C语言编译器(GCC)的第一个版本,还制定了GNU通用公共许可证(GNU General Public License,GPL)等。他坚持将Linux称为“GNU/LINUX”,目的是准确地反映GNU项目对Linux操作系统做出的贡献。尽管GNU项目先于Linux内核出现,其贡献有目共睹,不容忽视。但是将GNU也加入名称中,对其他为Linux操作系统的发展做出巨大贡献的人来说是不公平的。除此之外,由于Linux内核先于其他程序启动,因此我觉得“Linux/GNU”这个名称在技术上更为准确。

在目前流行的名称中,“Linux”指代的是内核和在典型的Linux发行版中出现的所有其他自由和开源软件,也就是整个Linux生态环境,而不仅仅是GNU的组成部分。操作系统市场似乎偏好单个词的名称,例如DOS、Windows、macOS、Solaris、Irix、AIX。我也选择使用这个名称。但如果你更喜欢“GNU/Linux”,那么阅读时请在脑海中执行“查找—替换”操作。

详细目录


  
  1. 第一部分 学习Shell
  2. 第1章 什么是Shell 3
  3. 1.1 终端仿真器 3
  4. 1.2 小试牛刀 4
  5. 1.2 .1 命令历史 4
  6. 1.2 .2 光标移动 4
  7. 1.3 几个简单的命令 5
  8. 1.4 结束终端会话 6
  9. 1.5 总结 6
  10. 第2章 导航 7
  11. 2.1 理解文件系统树 7
  12. 2.2 当前工作目录 8
  13. 2.3 列出目录内容 8
  14. 2.4 更改当前工作目录 9
  15. 2.4 .1 绝对路径名 9
  16. 2.4 .2 相对路径名 9
  17. 2.4 .3 一些有用的便捷写法 11
  18. 2.5 总结 11
  19. 第3章 探索Linux系统 12
  20. 3.1 使用ls命令之乐 12
  21. 3.1 .1 选项与参数 13
  22. 3.1 .2 进一步了解长格式 14
  23. 3.2 使用file命令确定文件类型 15
  24. 3.3 使用less命令查看文本文件 15
  25. 3.4 按图索骥 17
  26. 3.5 符号链接 19
  27. 3.6 硬链接 20
  28. 3.7 总结 20
  29. 第4章 操作文件和目录 21
  30. 4.1 通配符 22
  31. 4.2 mkdir——创建目录 24
  32. 4.3 cp——复制文件和目录 24
  33. 4.4 mv——移动和重命名文件 25
  34. 4.5 rm——删除文件和目录 26
  35. 4.6 ln——创建硬链接和符号链接 27
  36. 4.6 .1 硬链接 27
  37. 4.6 .2 符号链接 28
  38. 4.7 实战演练 28
  39. 4.7 .1 创建目录 28
  40. 4.7 .2 复制文件 29
  41. 4.7 .3 移动和重命名文件 29
  42. 4.7 .4 创建硬链接 30
  43. 4.7 .5 创建符号链接 31
  44. 4.7 .6 删除文件和目录 32
  45. 4.8 总结 34
  46. 第5章 和命令打交道 35
  47. 5.1 命令究竟是什么 35
  48. 5.2 识别命令 36
  49. 5.2 .1 type—显示命令类型 36
  50. 5.2 .2 which—显示可执行
  51. 文件的位置 36
  52. 5.3 获取命令文档 37
  53. 5.3 .1 help—获取Shell内建
  54. 命令的帮助信息 37
  55. 5.3 .2 --help—显示用法信息 38
  56. 5.3 .3 man—显示命令的
  57. 手册页 38
  58. 5.3 .4 apropos—显示适合的
  59. 命令清单 40
  60. 5.3 .5 whatis—显示手册页的
  61. 简述 40
  62. 5.3 .6 info—显示程序的info
  63. 条目 41
  64. 5.3 .7 文档文件 42
  65. 5.4 使用alias创建自己的命令 42
  66. 5.5 总结 44
  67. 第6章 重定向 45
  68. 6.1 标准输入、标准输出及
  69. 标准错误 45
  70. 6.2 标准输出重定向 46
  71. 6.3 标准错误重定向 47
  72. 6.3 .1 将标准输出和标准错误
  73. 重定向到同一个文件中 48
  74. 6.3 .2 丢弃用不着的输出结果 48
  75. 6.4 标准输入重定向 49
  76. 6.5 管道 50
  77. 6.5 .1 排序列表 51
  78. 6.5 .2 uniq—报告或忽略
  79. 重复行 52
  80. 6.5 .3 wc—统计文件中换行符、
  81. 单词以及字节的数量 52
  82. 6.5 .4 grep—输出与模式
  83. 匹配的行 53
  84. 6.5 .5 head/tail—输出文件的
  85. 开头/结尾部分 53
  86. 6.5 .6 tee—读取标准输入
  87. 并将输出结果写入
  88. 标准输出和文件 54
  89. 6.6 总结 55
  90. 第7章 “Shell眼”看世界 56
  91. 7.1 扩展 56
  92. 7.1 .1 路径名扩展 57
  93. 7.1 .2 浪纹线扩展 58
  94. 7.1 .3 算术扩展 59
  95. 7.1 .4 花括号扩展 60
  96. 7.1 .5 参数扩展 61
  97. 7.1 .6 命令替换 61
  98. 7.2 引用 62
  99. 7.2 .1 双引号 62
  100. 7.2 .2 单引号 64
  101. 7.2 .3 转义字符 64
  102. 7.2 .4 反斜线转义序列 65
  103. 7.3 总结 65
  104. 第8章 高级键盘技巧 66
  105. 8.1 编辑命令行 66
  106. 8.1 .1 光标移动 67
  107. 8.1 .2 修改文本 67
  108. 8.1 .3 剪切和粘贴文本 67
  109. 8.2 补全功能 68
  110. 8.3 命令历史记录 70
  111. 8.3 .1 搜索历史记录 70
  112. 8.3 .2 历史扩展 71
  113. 8.4 总结 72
  114. 第9章 权限 73
  115. 9.1 属主、属组以及其他用户 74
  116. 9.2 读取、写入和执行 75
  117. 9.2 .1 chmod—修改文件
  118. 模式 76
  119. 9.2 .2 使用GUI设置文件模式 79
  120. 9.2 .3 umask—设置默认权限 79
  121. 9.2 .4 一些特殊的权限 80
  122. 9.3 改变用户身份 81
  123. 9.3 .1 su—以其他用户身份
  124. 启动Shell 82
  125. 9.3 .2 sudo—以其他用户身份执行命令 83
  126. 9.3 .3 chown—更改文件属主和
  127. 属组 84
  128. 9.3 .4 chgrp—更改文件属组 85
  129. 9.4 行使权限 85
  130. 9.5 修改密码 87
  131. 9.6 总结 88
  132. 第10章 进程 89
  133. 10.1 进程的工作方式 90
  134. 10.2 查看进程 90
  135. 10.3 进程控制 94
  136. 10.3 .1 中断进程 94
  137. 10.3 .2 将进程置于后台 95
  138. 10.3 .3 使进程返回前台 95
  139. 10.3 .4 停止进程 96
  140. 10.4 信号 96
  141. 10.4 .1 使用kill命令向进程发送
  142. 信号 97
  143. 10.4 .2 使用killall命令向多个
  144. 进程发送信号 98
  145. 10.5 关闭系统 99
  146. 10.6 更多与进程相关的命令 99
  147. 10.7 总结 100
  148. 第二部分 配置与环境
  149. 第11章 环境 103
  150. 11.1 环境中都保存了什么 103
  151. 11.1 .1 检查环境 104
  152. 11.1 .2 一些值得注意的环境
  153. 变量 105
  154. 11.2 如何建立环境 106
  155. 11.3 修改环境 108
  156. 11.3 .1 应该修改哪些文件 108
  157. 11.3 .2 文本编辑器 109
  158. 11.3 .3 使用文本编辑器 109
  159. 11.3 .4 使改动生效 112
  160. 11.4 总结 112
  161. 第12章 Vi入门 113
  162. 12.1 为什么要学习Vi 113
  163. 12.2 背景知识 114
  164. 12.3 启动和退出Vi 114
  165. 12.4 编辑模式 116
  166. 12.4 .1 进入插入模式 116
  167. 12.4 .2 保存文件 117
  168. 12.5 光标移动 117
  169. 12.6 基本编辑 118
  170. 12.6 .1 追加 118
  171. 12.6 .2 新建 119
  172. 12.6 .3 删除 120
  173. 12.6 .4 剪切、复制及粘贴 121
  174. 12.6 .5 合并 122
  175. 12.7 搜索和替换 122
  176. 12.7 .1 行内搜索 122
  177. 12.7 .2 搜索整个文件 122
  178. 12.7 .3 全局搜索和替换 123
  179. 12.8 编辑多个文件 124
  180. 12.8 .1 在文件之间切换 125
  181. 12.8 .2 载入更多的文件进行
  182. 编辑 125
  183. 12.8 .3 将一个文件的内容复制到
  184. 另一个文件 126
  185. 12.8 .4 将整个文件插入另一个
  186. 文件 127
  187. 12.9 保存工作 128
  188. 12.10 总结 128
  189. 第13章 定制提示符 129
  190. 13.1 分解提示符 129
  191. 13.2 换一种提示符 131
  192. 13.3 增加颜色 132
  193. 13.4 移动光标 134
  194. 13.5 保存提示符 135
  195. 13.6 总结 135
  196. 第三部分 常见任务与必备工具
  197. 第14章 软件包管理 139
  198. 14.1 打包系统 140
  199. 14.2 软件包的工作方式 140
  200. 14.2 .1 软件包文件 140
  201. 14.2 .2 仓库 141
  202. 14.2 .3 依赖性 141
  203. 14.2 .4 低层和高层工具 141
  204. 14.3 常见的软件包管理任务 142
  205. 14.3 .1 在仓库中查找软件包 142
  206. 14.3 .2 安装仓库中的软件包 142
  207. 14.3 .3 安装软件包文件中的
  208. 软件包 142
  209. 14.3 .4 删除软件包 143
  210. 14.3 .5 通过仓库更新软件包 143
  211. 14.3 .6 通过软件包文件更新
  212. 软件包 144
  213. 14.3 .7 列举已安装的软件包 144
  214. 14.3 .8 确定软件包是否已安装 144
  215. 14.3 .9 显示已安装软件包的
  216. 相关信息 145
  217. 14.3 .10 识别某个文件是哪个
  218. 软件包安装的 145
  219. 14.4 总结 145
  220. 第15章 存储介质 147
  221. 15.1 存储设备的挂载与卸载 148
  222. 15.1 .1 查看已挂载的文件系统
  223. 列表 149
  224. 15.1 .2 确定设备名称 152
  225. 15.2 创建新文件系统 154
  226. 15.2 .1 用fdisk操作分区 154
  227. 15.2 .2 使用mkfs创建新的文件
  228. 系统 156
  229. 15.3 文件系统的检查和修复 157
  230. 15.4 在设备之间直接移动数据 158
  231. 15.4 .1 向可刻录CD写入数据 159
  232. 15.4 .2 创建CD-ROM的ISO
  233. 映像文件 159
  234. 15.4 .3 用文件集合创建ISO
  235. 映像文件 159
  236. 15.5 写入CD-ROM的ISO映像
  237. 文件 160
  238. 15.5 .1 直接挂载ISO映像
  239. 文件 160
  240. 15.5 .2 擦除可刻录CD 161
  241. 15.5 .3 刻录映像文件 161
  242. 15.6 总结 161
  243. 第16章 联网 162
  244. 16.1 网络检查与监控 163
  245. 16.1 .1 ping 163
  246. 16.1 .2 traceroute 164
  247. 16.1 .3 ip 165
  248. 16.1 .4 netstat 165
  249. 16.2 通过网络传输文件 166
  250. 16.2 .1 ftp 167
  251. 16.2 .2 lftp——更好的ftp 168
  252. 16.2 .3 wget 168
  253. 16.3 与远程主机的安全通信 169
  254. 16.3 .1 ssh 169
  255. 16.3 .2 scp与sftp 172
  256. 16.4 总结 173
  257. 第17章 查找文件 174
  258. 17.1 locate——简单的文件查找
  259. 方法 174
  260. 17.2 find——复杂的文件查找
  261. 方法 176
  262. 17.2 .1 测试条件 176
  263. 17.2 .2 操作符 178
  264. 17.2 .3 预定义操作 180
  265. 17.2 .4 用户自定义操作 182
  266. 17.2 .5 提高效率 182
  267. 17.2 .6 xargs 183
  268. 17.2 .7 实战演练 184
  269. 17.2 .8 find命令选项 185
  270. 17.3 总结 186
  271. 第18章 归档与备份 187
  272. 18.1 压缩文件 187
  273. 18.1 .1 gzip 188
  274. 18.1 .2 bzip2 190
  275. 18.2 文件归档 191
  276. 18.2 .1 tar 191
  277. 18.2 .2 zip 195
  278. 18.3 同步文件与目录 196
  279. 18.4 总结 199
  280. 第19章 正则表达式 200
  281. 19.1 什么是正则表达式 200
  282. 19.2 grep 201
  283. 19.3 元字符与文字字符 202
  284. 19.4 任意字符 203
  285. 19.5 锚点 203
  286. 19.6 方括号表达式与字符类 204
  287. 19.6 .1 排除 205
  288. 19.6 .2 传统的字符范围 205
  289. 19.7 POSIX字符类 206
  290. 19.8 POSIX基本型正则表达式与
  291. 扩展型正则表达式 209
  292. 19.9 多选结构 210
  293. 19.10 量词 211
  294. 19.10 .1 ?——匹配0次或1次 211
  295. 19.10 .2 *——匹配0次或多次 212
  296. 19.10 .3 +——匹配1次或多次 212
  297. 19.10 .4 {} ——匹配指定次数 213
  298. 19.11 实战演练 213
  299. 19.11 .1 使用grep验证电话号码
  300. 列表 213
  301. 19.11 .2 使用find查找路径名 214
  302. 19.11 .3 使用locate搜索文件 215
  303. 19.11 .4 使用Less和Vim搜索
  304. 文本 215
  305. 19.12 总结 217
  306. 第20章 文本处理 218
  307. 20.1 文本的应用 219
  308. 20.1 .1 文档 219
  309. 20.1 .2 网页 219
  310. 20.1 .3 电子邮件 219
  311. 20.1 .4 打印机输出 219
  312. 20.1 .5 程序源代码 219
  313. 20.2 温故知新 220
  314. 20.2 .1 cat—连接文件并
  315. 打印 220
  316. 20.2 .2 sort—排序 221
  317. 20.2 .3 uniq—删除重复行 227
  318. 20.3 切片和切块 228
  319. 20.3 .1 cut——从每行中删除
  320. 部分内容 229
  321. 20.3 .2 paste——合并行 231
  322. 20.3 .3 join——连接两个文件中
  323. 具有公共字段的行 233
  324. 20.4 比较文本 235
  325. 20.4 .1 comm——逐行比较两个
  326. 已排序的文件 235
  327. 20.4 .2 diff——逐行比较文件 236
  328. 20.4 .3 patch——对原文件应用
  329. diff文件 238
  330. 20.5 即时编辑 239
  331. 20.5 .1 tr——转写或删除字符 239
  332. 20.5 .2 sed——用于文本过滤和
  333. 转换的流编辑器 240
  334. 20.5 .3 aspell——交互式拼写
  335. 检查器 247
  336. 20.6 总结 250
  337. 第21章 格式化输出 251
  338. 21.1 简单的格式化工具 251
  339. 21.1 .1 nl——对行进行编号 252
  340. 21.1 .2 fold——在指定长度处
  341. 折行 254
  342. 21.1 .3 fmt——一个简单的文本
  343. 格式化工具 255
  344. 21.1 .4 pr——格式化要输出的
  345. 文本 258
  346. 21.1 .5 printf——格式化并输出
  347. 数据 259
  348. 21.2 文档格式化系统 261
  349. 21.3 总结 267
  350. 第22章 打印 268
  351. 22.1 打印简史 268
  352. 22.1 .1 “黑暗”时代 269
  353. 22.1 .2 基于字符的打印机 269
  354. 22.1 .3 图形化打印机 270
  355. 22.2 Linux的打印功能 271
  356. 22.3 准备文件打印 271
  357. 22.4 将打印作业发送至打印机 272
  358. 22.4 .1 lpr—以Berkeley风格
  359. 打印文件 272
  360. 22.4 .2 lp—以System V风格
  361. 打印文件 273
  362. 22.4 .3 a2ps—在PostScript
  363. 打印机上打印文件 274
  364. 22.5 监控打印作业 276
  365. 22.5 .1 lpstat——显示打印系统
  366. 状态 276
  367. 22.5 .2 lpq——显示打印队列
  368. 状态 277
  369. 22.5 .3 lprm/cancel——取消打印
  370. 作业 278
  371. 22.6 总结 278
  372. 第23章 编译程序 279
  373. 23.1 什么是编译 280
  374. 23.2 编译C程序 281
  375. 23.2 .1 获取源代码 281
  376. 23.2 .2 检查源代码树 283
  377. 23.2 .3 构建程序 284
  378. 23.2 .4 安装程序 288
  379. 23.3 总结 288
  380. 第四部分 编写Shell脚本
  381. 第24章 编写第一个脚本 291
  382. 24.1 什么是Shell脚本 291
  383. 24.2 如何创建并执行Shell脚本 292
  384. 24.2 .1 脚本文件格式 292
  385. 24.2 .2 可执行权限 293
  386. 24.2 .3 脚本位置 293
  387. 24.2 .4 脚本的理想位置 294
  388. 24.3 更多的格式技巧 294
  389. 24.3 .1 长选项 295
  390. 24.3 .2 缩进与续行 295
  391. 24.4 总结 296
  392. 第25章 启动项目 297
  393. 25.1 第一阶段:最小化文档 297
  394. 25.2 第二阶段:添加数据 299
  395. 25.3 变量与常量 300
  396. 25.3 .1 为变量与常量赋值 302
  397. 25.3 .2 here document 304
  398. 25.4 总结 306
  399. 第26章 自顶向下设计 307
  400. 26.1 Shell函数 308
  401. 26.2 局部变量 311
  402. 26.3 保持脚本执行 312
  403. 26.4 总结 315
  404. 第27章 流程控制:if分支 316
  405. 27.1 if语句 317
  406. 27.2 退出状态 317
  407. 27.3 使用test 319
  408. 27.3 .1 文件表达式 319
  409. 27.3 .2 字符串表达式 322
  410. 27.3 .3 整数表达式 323
  411. 27.4 更现代的test 324
  412. 27.5 (())——为整数设计 325
  413. 27.6 组合表达式 326
  414. 27.7 控制操作符:另一种分支
  415. 方式 329
  416. 27.8 总结 329
  417. 第28章 读取键盘输入 331
  418. 28.1 read——从标准输入读取值 332
  419. 28.1 .1 选项 334
  420. 28.1 .2 IFS 336
  421. 28.2 验证输入 338
  422. 28.3 菜单 339
  423. 28.4 总结 341
  424. 第29章 流程控制:while/until循环 342
  425. 29.1 循环 342
  426. 29.2 跳出循环 345
  427. 29.3 使用循环读取文件 347
  428. 29.4 总结 348
  429. 第30章 故障诊断 349
  430. 30.1 语法错误 349
  431. 30.1 .1 缺少引号 350
  432. 30.1 .2 缺少词法单元 351
  433. 30.1 .3 出乎意料的扩展 351
  434. 30.2 逻辑错误 353
  435. 30.2 .1 防御式编程 353
  436. 30.2 .2 小心文件名 354
  437. 30.2 .3 核实输入 355
  438. 30.3 测试 355
  439. 30.4 调试 357
  440. 30.4 .1 查找问题区域 357
  441. 30.4 .2 跟踪 357
  442. 30.4 .3 在执行过程中检查值 359
  443. 30.5 总结 360
  444. 第31章 流程控制:case分支 361
  445. 31.1 case命令 361
  446. 31.1 .1 模式 363
  447. 31.1 .2 执行多次操作 365
  448. 31.2 总结 366
  449. 第32章 位置参数 367
  450. 32.1 访问命令行 367
  451. 32.1 .1 确定参数个数 369
  452. 32.1 .2 shift——访问多个参数 369
  453. 32.1 .3 简单应用 371
  454. 32.1 .4 在Shell函数中使用
  455. 位置参数 371
  456. 32.2 批量处理位置参数 372
  457. 32.3 一个更完整的应用 374
  458. 32.4 总结 377
  459. 第33章 流程控制:for循环 380
  460. 33.1 for的传统形式 380
  461. 33.2 for的C语言形式 383
  462. 33.3 总结 384
  463. 第34章 字符串与数字 387
  464. 34.1 参数扩展 387
  465. 34.1 .1 基本参数 388
  466. 34.1 .2 管理空变量扩展 388
  467. 34.1 .3 返回变量名的扩展 390
  468. 34.1 .4 字符串操作 390
  469. 34.1 .5 大小写转换 393
  470. 34.2 算术求值与扩展 395
  471. 34.2 .1 数字基数 395
  472. 34.2 .2 一元操作符 395
  473. 34.2 .3 简单算术 395
  474. 34.2 .4 赋值 397
  475. 34.2 .5 位操作 399
  476. 34.2 .6 逻辑操作 399
  477. 34.3 bc——任意精度计算器语言 401
  478. 34.3 .1 使用bc 402
  479. 34.3 .2 示例脚本 403
  480. 34.4 总结 404
  481. 第35章 数组 405
  482. 35.1 什么是数组 405
  483. 35.1 .1 创建数组 406
  484. 35.1 .2 为数组赋值 406
  485. 35.1 .3 访问数组元素 406
  486. 35.2 数组操作 408
  487. 35.2 .1 输出数组的全部内容 408
  488. 35.2 .2 确定数组元素的数量 409
  489. 35.2 .3 查找数组使用的索引 410
  490. 35.2 .4 向数组尾部添加元素 410
  491. 35.2 .5 数组排序 410
  492. 35.2 .6 删除数组 411
  493. 35.3 关联数组 412
  494. 35.4 总结 412
  495. 第36章 其他命令 413
  496. 36.1 分组命令与子Shell 413
  497. 36.2 陷阱 419
  498. 36.3 使用wait实现异步执行 421
  499. 36.4 具名管道 423
  500. 36.4 .1 创建具名管道 423
  501. 36.4 .2 使用具名管道 424
  502. 36.5 总结 424

转载:https://blog.csdn.net/epubit17/article/details/114291305
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场