# 1-1.shell是什么?

我个人认为,shell 就是一系列的 linux 指令的集合。

它是用户与系统之间交互的媒介。

它既是一种命令语言,又是一种解释性的编程语言。

Shell 相比 C 等语言的优势在于它是完全嵌入在 Linux 中的,不需要安装,编译。

学术话的定义如下:

  • Shell 可以是一个程序,提供一个与用户对话的环境。这个环境只有一个命令提示符,让用户从键盘输入命令,所以又称为命令行环境( command line interface ,简写为 CLI )。 Shell 接收到用户输入的命令,将命令送入操作系统执行,并将结果返回给用户。
  • Shell 也可以是一个命令解释器,解释用户输入的命令。它支持变量、条件判断、循环操作等语法,所以用户可以用 Shell 命令写出各种小程序,又称为脚本 script。这些脚本都通过 Shell 的解释执行,而不通过编译。
  • Shell 还可以是一个工具箱,提供了各种小工具,供用户方便地使用操作系统的功能。

# 1-2.shell的种类

  • Bourne Shell(/usr/bin/sh 或者 /bin/sh) 目前所有 Shell 的祖先,被安装在几乎所有发源于 Unix 的操作系统上。
  • Bourne Again Shell(/bin/bash) 是 sh 的一个进阶版本,比 sh 更优秀, bash 是目前大多数 Linux 发行版以及 macOS 操作系统的默认 Shell
  • C Shell(/usr/bin/csh) 它的语法类似 C 语言。
  • K Shell(/usr/bin/ksh) 一般在收费的 Unix 版本上比较多见。
  • Z Shell(/bin/zsh) 它是一种比较新近的 Shell ,集 bashkshtcsh 各家之大成。

# 1-3.全局变量

上述的 /usr/bin/ 或者 /bin/,都是系统设置的环境变量,可以利用 echo $PATH 来查看所有的环境变量。

包含 $PATH 的所有的全局变量如下:

  • BASHPIDBash 进程的进程 ID
  • EDITOR:默认的文本编辑器。
  • HOME:用户的主目录。
  • HOST:当前主机的名称。
  • LANG:字符集以及语言编码,比如 zh_CN.UTF-8
  • PATH:由冒号分开的目录列表,当输入可执行程序名后,会搜索这个目录列表。
  • PWD:当前工作目录。
  • SHELLShell 的名字。
  • TERM:终端类型名,即终端仿真器所用的协议。
  • UID:当前用户的 ID 编号。
  • USER:当前用户的用户名。

全局变量是 Bash 环境自带的变量,进入 Shell 时已经定义好了,可以直接使用。它们通常是系统定义好的。

可直接在 Shell 中输入 env,来查看所有的全局变量。

# 1-4.配置文件

全局变量一般都可以在配置文件中进行配置。bash 对应的是 .bash_profile 文件,而 zsh 对应的是 .zshrc

配置文件的目录一般都放在当前用户的 目录下。

譬如,macos 系统中对应的 目录即是 ~ 或者 /users/your-user-name/

zsh 为例:


vi ~/.zshrc

# 假设当前用户名为 jack,也可以使用这个:
vi /users/jack/.zshrc

1
2
3
4
5
6

TIP

  • ~ 目录下的配置文件是用户级别的配置。也就是说,只会对当前登录的用户起作用。如果切换了用户,新配置不会存在新用户的 ~ 目录下,也就不会生效。
  • 如果想对所有用户生效,要配置 /etc/ 目录下的相关对应配置文件。如 /etc/profile/etc/zshrc 等。
Last Updated: 2/20/2023, 6:19:48 PM