Shell:入门学习笔记

Shell入门学习

Shell介绍

Shell 是一个命令行界面(CLI)程序,它允许用户与操作系统进行交互。Shell 充当了用户与操作系统内核之间的桥梁,它接收用户输入的命令,然后解释这些命令,并调用相应的系统程序来执行这些命令。

Shell 提供了以下主要功能:

  1. 命令解释:Shell 的最基本功能是读取用户输入的命令,并将这些命令转换为操作系统可以理解的格式。然后,Shell 将这些命令传递给操作系统内核来执行。
  2. 程序执行:Shell 可以执行存储在文件中的程序,这些程序可以是用任何编程语言编写的,只要它们被编译或解释成操作系统可以执行的格式。
  3. 脚本编程:Shell 支持将一系列命令保存在文件中,这些文件被称为脚本。用户可以通过运行脚本来自动化一系列复杂的任务。Shell 脚本是系统管理员和开发人员常用的工具,用于自动化重复性的任务。
  4. 环境控制:Shell 允许用户设置和修改环境变量,这些变量存储了有关用户会话和操作系统的信息。环境变量可以影响程序的运行方式,例如指定程序的搜索路径、设置默认的文件权限等。
  5. 文件操作:Shell 提供了一系列的命令来创建、删除、移动、复制和重命名文件,以及改变目录等。这些命令使得用户可以在文件系统中导航和操作文件。
  6. 管道和重定向:Shell 支持管道(|)和重定向(><>>)等特性,这些特性允许用户将命令的输出作为另一个命令的输入,或将命令的输出保存到文件中。这使得用户可以将多个命令组合成一个复杂的命令序列,以实现更强大的功能。
  7. 作业控制:Shell 允许用户同时运行多个作业(命令或程序),并提供了作业控制的功能,如挂起、恢复、终止作业等。这使得用户可以在不中断当前会话的情况下,管理多个并行运行的作业。

常见的 Shell 类型包括 Bash(Bourne Again SHell)、Zsh(Z Shell)、Fish(the friendly interactive shell)、Csh/Tcsh(C Shell/TENEX C Shell)和 Ksh(Korn Shell)等。每种 Shell 都有其独特的特性和优势,用户可以根据自己的喜好和需求选择合适的 Shell。

常见的Shell类型

  • Bash(Bourne Again SHell):是最常用的 Shell 之一,它兼容 Bourne Shell(sh)的语法,并增加了许多新的特性。Bash 是大多数 Linux 发行版和 macOS 的默认 Shell。
  • Zsh(Z Shell):是一种功能强大的 Shell,提供了比 Bash 更多的特性和改进的用户体验。它支持主题、插件和自动补全等功能。
  • Fish(the friendly interactive shell):是一种用户友好的 Shell,注重易用性和自动补全。它提供了丰富的颜色和智能提示,使得命令行操作更加直观。
  • Csh/Tcsh(C Shell/TENEX C Shell):是基于 C 语言的 Shell,提供了类似于 C 语言的语法特性。但由于其语法与其他 Shell 差异较大,且在现代 Linux 系统中较少使用,因此普及度不如 Bash。
  • Ksh(Korn Shell):是 AT&T Bell 实验室开发的 Shell,旨在兼容 Bourne Shell 的同时提供新的特性。它的一些特性被后来的 Bash 所采纳。

查看本机有哪些Shell解析器

在大多数Linux系统中,/etc/shells文件包含了系统上所有可用的shell解析器的路径。你可以使用cat命令来查看这个文件的内容,以了解你的系统支持哪些shell解析器。

1
cat /etc/shells

这个文件会列出系统上所有被系统识别并允许用户登录时使用的shell路径,如/bin/bash/bin/sh/bin/tcsh等。

查看当前用户的默认Shell

可以使用echo $SHELL命令来查看。

1
echo $SHELL

这将输出当前用户的默认shell路径,如/bin/bash

Hello World

一个简单的"Hello World" Shell脚本示例如下。首先,你需要使用文本编辑器(如vim、nano、gedit等)创建一个新的文本文件,并将其保存为hello_world.sh(或任何你喜欢的名字,只要以.sh结尾即可,以表明这是一个Shell脚本文件)。

然后,在文件中输入以下内容:

1
2
3
#!/bin/bash  
# 这是一个简单的Hello World脚本  
echo "Hello World"

这里解释一下上面的内容:

  • #!/bin/bash 是一个shebang(也称为hashbang、pound bang或hash pling),它告诉系统这个脚本应该用哪个解释器来执行。在这个例子中,它指定了bash作为解释器。
  • # 这是一个简单的Hello World脚本 是一个注释,以#开头。在Shell脚本中,所有以#开头的行都会被解释器忽略,这些行通常用于提供脚本的说明或元数据。
  • echo "Hello World" 是脚本的实际命令,它会将文本“Hello World”输出到标准输出(通常是终端或屏幕)。

保存文件后,你需要给这个脚本文件添加执行权限。在终端中,切换到脚本文件所在的目录,并运行以下命令:

1
chmod +x hello_world.sh

这个命令会修改hello_world.sh文件的权限,使其变得可执行。

现在,你可以通过在终端中运行以下命令来执行脚本:

1
./hello_world.sh

或者,你也可以直接使用bash解释器来执行脚本,而不需要给脚本文件添加执行权限:

1
bash hello_world.sh

无论哪种方式,你都应该在终端中看到输出“Hello World”。

Shell脚本的执行方式

Shell脚本的执行方式多种多样,以下是一些常见的执行方式及其特点:

1. 直接执行

1.1 绝对路径执行

  • 方法:在终端中直接输入脚本的绝对路径来执行。例如,如果脚本位于/home/user/scripts/test.sh,则可以使用命令/home/user/scripts/test.sh来执行。
  • 特点:无论当前工作目录在哪里,只要知道脚本的绝对路径,就可以直接执行。

1.2 相对路径执行

  • 方法:在终端中使用./后跟脚本与当前目录的相对路径来执行。例如,如果脚本位于当前目录下,且文件名为test.sh,则可以使用命令./test.sh来执行。
  • 特点:方便在脚本所在目录或其子目录下执行脚本,但需要注意当前工作目录的位置。

注意:无论是绝对路径执行还是相对路径执行,脚本文件都需要具有可执行权限。可以使用chmod +x 脚本名命令来赋予脚本可执行权限。

2. 使用Shell解释器执行

2.1 使用bash或sh命令执行

  • 方法:在终端中使用bash 脚本名sh 脚本名命令来执行脚本。
  • 特点:不需要脚本具有可执行权限即可执行。这种方法会启动一个新的bash或sh进程来执行脚本中的命令。

2.2 使用其他Shell解释器执行

  • 除了bash和sh之外,还可以使用其他Shell解释器来执行脚本,如kshcshtcsh等。使用方法类似于bash或sh,即解释器名 脚本名

3. 使用source或.命令执行

  • 方法:在终端中使用source 脚本名.(点命令,注意后面有空格)脚本名来执行脚本。
  • 特点:这种方法不会启动新的Shell进程,而是在当前Shell进程中执行脚本中的命令。因此,脚本中定义的变量和函数等在当前Shell中仍然有效。这对于修改当前Shell环境变量或配置文件时特别有用。
0%