MISSING SEMESTER

课程概览与 shell

使用 shell

  1. shell 基于空格分割命令并进行解析,然后执行第一个单词代表的程序,并将后续的单词作为程序可以访问的参数。
  2. 如果您希望传递的参数中包含空格(例如一个名为 My Photos 的文件夹),您要么用使用单引号,双引号将其包裹起来,要么使用转义符号 \ 进行处理(My\ Photos)。

在 shell 中导航

  1. shell 中的路径是一组被分割的目录,在 Linux 和 macOS 上使用 / 分割,而在 Windows 上是 \
  2. 如果某个路径以 / 开头,那么它是一个绝对路径,其他的都是相对路径。相对路径是指相对于当前工作目录的路径,当前工作目录可以使用 pwd 命令来获取。此外,切换目录需要使用 cd 命令。在路径中,. 表示的是当前目录,而 .. 表示上级目录
  3. 为了查看指定目录下包含哪些文件,我们使用 ls 命令:
  4. 还有几个趁手的命令是您需要掌握的,例如 mv(用于重命名或移动文件)、 cp(拷贝文件)以及 mkdir(新建文件夹)。
  5. 如果您想要知道关于程序参数、输入输出的信息,亦或是想要了解它们的工作方式,请试试 man 这个程序。它会接受一个程序名作为参数,然后将它的文档(用户手册)展现给您

在程序间创建连接

  1. 最简单的重定向是 < file> file。这两个命令可以将程序的输入输出流分别重定向到文件:
  2. >> 相当于 add

shell 工具和脚本

Shell 脚本

  1. Bash 中的字符串通过 '" 分隔符来定义,但是它们的含义并不相同。以 ' 定义的字符串为原义字符串,其中的变量不会被转义,而 " 定义的字符串会将变量值进行替换。

  2. 脚本参数 $0 - 脚本名 $1$9 - 脚本的参数。 $1 是第一个参数,依此类推。 $@ 所有参数 $# 参数个数 $? 前一个命令的返回值 $$ 当前脚本的进程识别码 !! 完整的上一条命令,包括参数。常见应用:当你因为权限不足执行命令失败时,可以使用 sudo !! 再尝试一次。 $_ 上一条命令的最后一个参数。如果你正在使用的是交互式 shell,你可以通过按下 Esc 之后键入 . 来获取这个值。

  3. || and && 都会短路

  4. 命令替换,当您通过 $(CMD) 这样的方式来执行 CMD 这个命令时,它的输出结果会替换掉 $(CMD)

  5. shell 的 通配(globbing)

    1. 通配符 - 当你想要利用通配符进行匹配时,你可以分别使用 ?* 来匹配一个或任意个字符。例如,对于文件 foo , foo1 , foo2 , foo10bar, rm foo? 这条命令会删除 foo1foo2 ,而 rm foo* 则会删除除了 bar 之外的所有文件。
    2. 花括号 {} - 当你有一系列的指令,其中包含一段公共子串时,可以用花括号来自动展开这些命令。这在批量移动或转换文件时非常方便。