高级bash脚本编写指南 Zsh 开发指南(一):变量和语句

11/27 23:17:40 来源网站:辅助卡盟网

   }

}

(($#files_to_delete)) && rm -v $files_to_delete

为什么要使用 shell 脚本语言

对于没有接触过 shell 脚本的开发者或者用户来说,有一个更重要的问题,我为什么要学习和使用 shell 脚本呢?

那么要从 shell 脚本的使用场景说起。Shell 是一种和计算机系统交互的文本界面(CLI),简单说就是输入命令后返回结果(也有比较复杂的操作)。CLI 在某些场景要比图形界面(GUI)方便和高效很多,是不可取代的(即使有一天语音识别取代了文本输入,CLI 也会换汤不换药地继续存在)。那么使用 CLI 就必须约定好指令格式,而 shell 脚本就是一种用于 CLI 交互的指令格式。

因为这个比较特别的场景,shell 脚本有一些与其他编程语言不同的特点。一个很重要的特点,shell 脚本要比较简洁,容易输入。如果发送一条简单指令就要打几十个字符,那恐怕谁也无法接受。而为了达到可以接受的简洁程度,shell 脚本的语法,往往比其他编程语言的更加怪异。

有人可能会说,这搞混了两个事情。在 CLI 输入命令和写脚本文件然后执行命令是两回事,不需要使用同一种语言,而只是在 CLI 交互中,通常是没有必要写复杂逻辑的,也就是说 shell 脚本基本没有必要学习。

是两回事不假,但二者并不是不相关的。比如有人这么想后,决定在 shell 里只使用最简单的命令,不学习较为复杂的语法,如果需要写脚本,就用 Python 之类的语言写。那么有什么问题吗?

Python 是为通用的场景设计的,虽然也能处理 shell 脚本所做的事情,但往往要写出多几倍甚至几十倍(如果对 Python 也不甚了解的话)的代码出来。而很多时候,shell 脚本做的是一次性工作,运行完就直接删除,或者直接在一行敲完,回车即可,这样的场景用 Python 写成本要高出很多。而且并不是一个 Python 初学者就能用 Python 实现 shell 脚本的功能的,甚至熟练的 Python 开发者也很可能一时想不好怎么实现某个用 shell 脚本能很容易实现的功能。Shell 脚本的很多工作是和字符串和目录文件打交道,特点是要实现的功能复杂多样,没有固定模式,无论用什么语言写,都不容易。Python 自带的字符串和目录文件等类库功能非常基础,基本只能实现功能很单一的操作,稍微复杂点的功能都需要自己写。如果去找某些功能复杂的第三方库,那就会涉及一堆问题,比如同样有学习和部署成本,可能因为用户少所以有 bug 未被发现,可能已经没有人维护了,Python 的语法决定库怎么写都不能让语法太简洁等等。

而初步熟悉一门 shell 脚本只需要几十分钟,用多了自然就熟悉了,成本收益的权衡不言而喻。

格式约定

文中行首的%代表 zsh 的命令提示符(类似 bash 的$,这个是可以自由定义的,具体是什么不重要),行首的>代表此行是换行后的输入内容,以#开头的为注释(非 root 用户的命令提示符,本系列文章不需要 root 用户),其余的是命令的输出内容。另外某些地方会贴成段的 zsh 代码,那样就省略开头的%,比较容易分辨。

一个样例:

  1. # 前两行是输入内容,第三行是输出内容

    % echo "Hello \

    > World"

    Hello World

    本系列文章使用的 zsh 版本是 5.4.1(写这篇文章时的最新版本),代码在老版本中可能运行不了或者结果有出入,尽量使用最新版本。

    下面直接进入正题。

    变量

    接触一门新的编程语言,运行完 Hello World 后,首先要了解的基本就是如何定义和使用变量了。有了变量后可以比较变量内容,进而可以接触条件、循环、分支等语句,继而了解函数的用法,更高级的数据结构的使用,更多库函数高级bash脚本编写指南,等等。这样就大概了解了一门面向过程的语言的基本用法,剩下的可以等到用的时候再查手册。

    暂无相关资讯
高级bash脚本编写指南 Zsh 开发指南(一):变量和语句