Zsh 开发指南(第二十一篇 测试方法以及编写可测试代码的方法)

2017-09-29
阅读 4 分钟
1.9k
作为一种重要的测试方法,单元测试在很多种编程语言程序测试中起到举重轻重的作用。但不幸的是,单元测试基本不适用于 shell 脚本。并不是说 shell 脚本不能被单元测试,而是说单元测试能测试出来的问题很少,投入却很大。为了让 shell 脚本能被单元测试,50 行的代码很可能要改写成 100 多行甚至更多行。更重要的是 she...

Zsh 开发指南(第二十篇 代码风格)

2017-09-20
阅读 4 分钟
2.8k
因为 shell 脚本语法比较灵活,写 shell 脚本的开发者熟悉的编程语言也有较大差异,大家很容易写出风格迥异的代码出来。如果只有自己一个人用还好,如果是大家合作开发同一个项目,代码风格不同就会造成不小的麻烦。所以约定一个代码风格是很有必要的。

使用 wsl-terminal 更好地体验 Win 10 WSL 终端环境

2017-09-17
阅读 5 分钟
10.3k
WSL 从最初功能不全 bug 遍地都是,到现在除了少数几个比较顽固的 bug 外,基本足以正常使用了。但自带终端模拟器的体验依然非常糟糕,而且在可以预期的未来都不会有太大的长进了。我是从去年 8 月开始开发 wsl-terminal(中文页面)的,期间因为想不到可以添加什么功能而搁置了比较长时间。最近心血来潮,添加了很多实...

Zsh 开发指南(第十九篇 脚本实例讲解)

2017-09-05
阅读 15 分钟
3.8k
导读 本文将讲解一些比较简单的 zsh 脚本实例。 实例一:复制一个目录的目录结构 功能: 将一个目录及它下边的所有目录复制到另一个目录中(即创建同名目录),但不复制目录下的其他类型文件。 例子: {代码...} 思路: 首先需要先将 src 目录下的目录名筛选出来,可以用 **/*(/) 匹配。 然后用 mkdir -p 在 dst 目录中...

Zsh 开发指南(第十八篇 更多内置模块的用法)

2017-09-04
阅读 4 分钟
3k
除了 zsh/mathfunc、zsh/net/socket、zsh/net/tcp,zsh 还内置了一些其他的内置模块。本文简单讲几个比较常用的模块。

Zsh 开发指南(第十七篇 使用 socket 文件和 TCP 实现进程间通信)

2017-09-03
阅读 3 分钟
3.1k
就像我之前提到的,zsh 脚本是可以直接使用 socket 文件(UNIX domain socket 所使用)或者 TCP 和其他进程通信的。如果进程都在本地,用 socket 文件效率更高些,并且不要占用端口,权限也更好控制。如果是在不同机器,可以使用 TCP。

Zsh 开发指南(第十六篇 alias 和 eval 的用法)

2017-09-03
阅读 2 分钟
3.9k
alias(别名)在 shell 中是非常常用的,它主要用于给命令起别名,简化输入。但主要用于交互场景,在脚本中基本用不到。eval 是一个非常强大的命令,它的功能是将字符串解析成代码再执行,但也会额外增加很多复杂性,非必要场景尽量少用。alias 和 eval 看起来好像没什么关系,但功能上有相似之处,所以放在一起讲。

Zsh 开发指南(第十五篇 进程与作业控制)

2017-09-02
阅读 3 分钟
4.6k
通常情况 zsh 脚本是在一个进程中(并且单线程)执行的,但有时我们需要并行执行一些代码,因为现在的 CPU 基本都是多核的,这样可以加快运行速度。这就涉及到进程与作业控制。这里不讲进程的概念。

Zsh 开发指南(第十四篇 文件读写)

2017-09-02
阅读 4 分钟
3.4k
写文件要比读文件简单一些,最常用的用法是使用 > 直接将命令的输出重定向到文件。如果文件存在,内容会被覆盖;如果文件不存在,会被创建。

Zsh 开发指南(第十三篇 管道和重定向)

2017-09-02
阅读 5 分钟
2.7k
到目前为止,我们已经大致了解了 zsh 的语法特性,可以写一些功能不复杂的脚本了。但 shell 脚本主要的应用场景并不是闭门造车写独立的程序,而是和外部环境交互。所以要写出实用的脚本,要了解 zsh 如何和外部环境交互。这里的外部环境包括其他进程、文件系统、网络等等。本篇主要讲管道和重定向,这是和其他进程、文件...

Zsh 开发指南(第十二篇 [[ ]] 的用法)

2017-09-01
阅读 3 分钟
2.7k
[[ ]] 是我们比较熟悉的符号了,从第一篇开始我们就一直在用,但我一直没有详细介绍它的用法,只用到了它的一小部分功能。本文详细介绍 [[ ]] 的用法。

Zsh 开发指南(第十一篇 变量的进阶内容)

2017-09-01
阅读 3 分钟
2.4k
之前我们已经依次讲过 zsh 下的五种变量(字符串、数组、哈希表、整数、浮点数)的基本用法。但变量的使用方面,还有一些比较进阶的内容,这对一些比较特别的场景很有帮助。

Zsh 开发指南(第十篇 文件查找和批量处理)

2017-09-01
阅读 4 分钟
7.8k
寻找满足特定条件的文件路径,简称文件查找,是 shell 脚本的常见任务,因为条件复杂多样,这样的任务并不轻松。很多人使用 find 命令来做,但 find 只能覆盖一部分功能,其他的要自己进一步处理,而且 find 并不好用,和脚本其他部分配合也比较麻烦,容易出错。用 zsh 的话,基本不需要 find 命令,借助 zsh 自身的功能...

Zsh 开发指南(第九篇 函数和脚本)

2017-08-31
阅读 4 分钟
8.1k
很多时候,我们写的代码并不是只运行一次就不再用了,那就需要保存到文件里。我们通常称包含解释性编程语言代码的可执行文件为脚本文件,简称脚本。而在脚本内部,也会有一些可以复用的代码,我们可以把这样的代码写成函数,供其他部分调用。Zsh 中函数和脚本基本上一样的,可以认为脚本就是以文件名为函数名的函数。脚...

Zsh 开发指南(第八篇 变量修饰语)

2017-08-31
阅读 3 分钟
2.2k
变量修饰语是 zsh 中有一个很独特的概念,对变量进行操作,功能上和函数类似,但用起来更方便,在一行代码里实现复杂功能主要靠它了。而代价是可读性更差,怎么用就要自己权衡了。它也是 zsh 最有特色的部分之一。变量修饰语主要应用于数组和哈希表,但也有一小部分可以应用于字符串(整数和浮点数也会被当成字符串处理)。

Zsh 开发指南(第七篇 数值计算)

2017-08-30
阅读 2 分钟
4.7k
数值计算主要是在 (( )) 或者 $(( )) 中进行的,在 $[ ] 或者 $var[ ](可用于数组索引的计算)中也能进行一部分,这里统一使用小括号。

Zsh 开发指南(第六篇 哈希表)

2017-08-30
阅读 3 分钟
3.3k
哈希表是比数组更复杂的数据结构,在某些语言里被称作关联数组或者字典等等。简单说,哈希表用于存放指定键(key)对应的值(value),键和值的关系,就像字典中单词和释义的对应关系,通过单词可以快速找到释义,而不需要从头依次遍历匹配。准确地说,哈希表只是该功能的一种实现方式,也可以使用各种树或者其他数据结...

Zsh 开发指南(第五篇 数组)

2017-08-29
阅读 4 分钟
2.8k
了解完结构比较简单的字符串后,我们来看更复杂一些的数组。其实字符串在 zsh 中也可以当字符数组操作,但很少有需要把字符串当数组来处理的场景。本篇中主要讲的是字符串数组,复杂度要比单个字符串高一些。

Zsh 开发指南(第四篇 字符串处理之通配符)

2017-08-29
阅读 2 分钟
3.8k
通配符(glob)是 shell 中的一个比较重要的概念,可以认为是正则表达式的简化版本。通配符在字符串匹配和文件名搜索等方面非常有用。本篇只讲它在字符串匹配上的用法。

Zsh 开发指南(第三篇 字符串处理之转义字符和格式化输出)

2017-08-28
阅读 7 分钟
5.6k
上一篇讲了 zsh 的常用字符串操作,这篇开始讲更为琐碎的转义字符和格式化输出相关内容。包括转义字符、引号、print、printf 的使用等等。其中很多内容没有必要记忆,作为手册参考即可。

Zsh 开发指南(第二篇 字符串处理之常用操作)

2017-08-28
阅读 4 分钟
5.3k
字符串处理是 shell 脚本的重点部分,因为 shell 脚本主要的工作是和文件或者其他程序打交道,数据格式通常是文本,而处理没有统一格式的文本文件出奇地复杂,shell 命令中也有很多都是处理文本的。用 bash 处理文本的话,因为自身的功能有限,经常需要调用像 awk、sed、grep、cat、cut、comm、dirname、basename、expr...

Zsh 开发指南(第一篇 变量和语句)

2017-08-28
阅读 8 分钟
10.6k
网上关于 zsh 的文章有很多,但其中超过 95% 的文章讲如何使用和配置,写如何用 zsh 编程的文章很少,能找到的多数也是只言片语,不成系统。国外有几本讲 zsh 的书,其中也有很多内容是配置、使用、编写补全脚本等等,对编程有用的篇幅占比并不多,而且比较零散不便于查询。至于官方文档?那是让即使有多年编程经验的开...

[译] 如何在云服务提供商的平台上使用Docker Machine

2015-06-25
阅读 5 分钟
6.2k
大家好,今天我们来了解如何使用Docker Machine在各种云服务提供商的平台上部署Docker。Docker Machine是一个可以帮助我们在自己的电脑、云服务提供商的平台以及我们数据中心的机器上创建Docker机器的应用程序。它为创建服务器、在服务器中安装Docker、根据用户需求配置Docker客户端提供了简单的解决方案。驱动API对本地...

[译] 11个无用而有趣的Linux终端彩蛋

2015-06-23
阅读 3 分钟
6.3k
当我们使用命令行工作时,Linux是功能和实用性最好的操作系统之一。想要执行一个特殊任务?可能一个程序或者脚本就可以帮你搞定。但就像一本书中说到的,只工作不玩耍聪明的孩子也会变傻。下边是我最喜欢的可以在终端做的没有实际用途的、傻傻的、恼人的、可笑的事情。

[译] Linux 用户的 3 个命令行小技巧

2015-06-15
阅读 2 分钟
4.7k
Linux世界充满了乐趣,我们越深入进去,就会发现越多有趣的事物。我们会努力给你提供一些小技巧,让你和其他人有所不同,下面就是我们准备的3个小技巧。

[译] 如何使用Monit部署服务器监控系统

2015-06-01
阅读 6 分钟
9.6k
很多Linux系统管理员依赖一个集中式的远程监控系统(比如Nagios或者Cacti)来检查他们网络基础设备的健康状况。虽然集中式监控让管理员的生活更简单了,然而处理很多机器和服务时,专用的监控中心显然成为了一个单点故障,如果监控中心挂了或者因为什么原因(比如硬件或者网络故障)不可访问了,你就会失去整个网络基础...

[译] zBackup:一个多功能的去重备份工具

2015-05-27
阅读 2 分钟
3.8k
zbackup是一个基于rsync思想的全局去重数据备份工具。给它传入一个大的tar文件后,它会仅存储一次该文件的重复部分,然后对结果进行压缩,并根据参数确定是否对其加密。传入另一个tar文件后,它会从之前的已备份文件中复用重复数据。只有新的改动会被保存,并且只要文件差异不是很大,需要的存储空间非常少。无论何时,...

[译] 5 个有趣的 Linux 命令行技巧

2015-05-22
阅读 3 分钟
6.2k
你有将Linux物尽其用吗?对很多Linux用户来说,有很多看起来是技巧的有用特性。有些时候你会需要这些技巧。本文会帮助你更好得使用一些命令,发挥其更强大的功能。

[译] 4个可以发送完整电子邮件的命令行工具

2015-05-21
阅读 5 分钟
7.1k
今天的文章里我们会讲到一些使用Linux命令行工具来发送带附件的电子邮件的方法。它有很多用处,比如在应用程序所在服务器上,使用电子邮件发送一个文件过来,或者你可以在脚本中使用这些命令来做一些自动化操作。在本文的例子中,我们会使用foo.tar.gz文件作为附件。

[译] Inxi:获取Linux的系统和硬件信息

2015-05-20
阅读 5 分钟
4.1k
我们已经展示了一些不同的应用程序和方法来获取Linux的系统和硬件信息。在这一系列里,我们将看到如何使用inxi来获取这些详情信息。在论坛技术支持中,它可以作为调试工具,迅速确定用户的系统配置和硬件信息。