大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。输出重定向一个命令的输出通常用于标准输出,也可以很容易地将输出转移到一个文件。这种能力被称为输出重定向:如果记号 >
元字符UNIX Shell 提供有特殊意义的各种元字符,同时利用他们在任何 Shell 脚本,并导致终止一个字,除了引用。举个例子,在列出文件中的目录时 ? 匹配一个一元字符,并且 * 匹配多个字符。下面是一个 Shell 特殊字符(也称为元字符)的列表: * ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab在一个字符前使用 \ ,它可能被引用(例如,代表它自己)。
到目前为止你已经学习过创建循环以及用循环来完成不同的任务。有时候你需要停止循环或跳出循环迭代。在本教程中你将学到以下语句用于控制 Shell 循环:break 语句continue 语句无限循环所有循环都有一个有限的生命周期。当条件为假或真时它们将跳出循环,这取决于这个循环。一个循环可能会由于未匹配到适合得条件而无限执行。一个永远执行没有终止的循环会执行无数次。
每一种 Shell 都支持各种各样的操作符。我们的教程基于默认的 Shell(Bourne),所以在我们的教程中涵盖所有重要的 Bourne Shell 操作符。下面列出我们将讨论的操作符:算术运算符。关系运算符。布尔操作符。字符串运算符。文件测试操作符。最初的 Bourne Shell 没有任何机制来执行简单算术运算,它使用外部程序 awk 或者最简单的程序 expr。
之前的教程就在命名变量时,使用某些非字符数值作为字符变量名提出警告。这是因为这些字符用于作为特殊的 UNIX 变量的名称。这些变量是预留给特定功能的。例如,$ 字符代表进程的 ID 码,或当前 Shell 的 PID: $echo $$以上命令将输出当前 Shell 的 PID: 29949下面的表列出了一些特殊变量,可以在你的 Shell 脚本中使用它们:变量描述$0当前脚本的文件名。
Shell 是用户访问 Unix 操纵系统的接口。它接收用户的输入,然后基于该输入执行程序。程序执行完后,结果会显示在显示器上。Shell 就是运行指令、程序和 Shell 脚本的运行环境。就和操作系统可以有很多种类一样,Shell 也有很多种。每一种 Shell 都有其特定的指令和函数集。 Shell 提示符提示符 $ 被称为命令提示符。当显示命令提示符后,用户就可以键入命令。
在 UNIX 操作系统中,文档编辑器有很多种,其中最友好的工具就是 vi. 该文档编辑器可以让用户在文件中基于上下文执行编辑操作。 现在,用户可以使用 vi 文档编辑器的升级版 VIM.这里的 VIM 中的 M 就是源自改善的意思。 vi 通常会被认为是 UNIX 编辑器的实施标准,原因如下:几乎在所有 UNIX 系列操作系统中都有效。 它的具体实现都非常的类似。
如果用户在 UNIX 操作系统上执行了一个程序,那么操作系统会为这个程序创建一个运行它的特定环境。这个环境包含系统运行该程序所需的一切资源,使得好像系统中没有运行其他程序一样。 用户如果在 UNIX 操作系统中输入一个指令,操作系统就会创建(启动)一个相应的进程。比如,如果用户希望使用 ls 指令来列出目录内的文件列表时,系统就启动了一个进程来完成这个任务。
你可以连接两个命令在一起,这样一个程序的输出就可以作为下一个程序的输入。两个或两个以上的命令以这种方式连接形成一个管道。为了形成管道,在同一行中利用一个竖线(|)将两个命令隔开。如果一个程序将另一个程序的输出作为输入数据,接着对输入的数据执行一些操作,并将结果写入标准输出,它就称为一个过滤器。grep 命令grep 程序用固定的模式搜索一个文件或多个文件。
文件所有权是 UNIX 的一个重要的组成部分,提供了一种安全的方法来存储文件。在 UNIX 中每个文件有以下属性:所有者权限:所有者的权限决定文件的所有者可以对文件执行的操作。组权限:组权限决定了属于该组的成员对他所拥有的文件能够执行的操作。其他人权限:其他人权限表示其他所有人对于该文件能够进行的操作。
在一些场景中,我们通常希望一个脚本只能有一个实例运行,不希望一个脚本有多个实例在同时运行。比如用 crontab 周期性运行脚本时,有时不希望上一个轮次还没运行完,下一个轮次就开始运行了。
我们的bash 脚本通常会启动好多子脚本和子进程,当父脚本意外退出时,子进程其实并不会退出,而是继续运行着。 如果脚本是周期性运行的,有可能发生一些意想不到的问题。
关注时代Java