Bash Shell 脚本

149 阅读7分钟

容易理解,shell 是一种接受键盘命令并将其传递给操作系统执行的软件。以前,它是类 Unix 系统(如 Linux)上唯一的用户界面。现在,我们有图形用户界面(GUI)和命令行界面(CLI),例如 shell。

大多数 Linux 系统上的 shell 应用程序称为 bash(Bourne Again Shell,是 Steve Bourne 原始 Unix shell 程序 sh 的扩展版本)。除了 bash,Linux 系统上还有各种 shell 程序,包括 kshtcshzsh


介绍

Bash Shell 脚本是一种强大的方式来自动化任务和高效管理系统。本指南将通过使用 Git Bash 讲解 Bash 脚本的基础知识,使即使是新手也能轻松理解。

什么是终端?

理解终端

终端是一个名为终端仿真器的程序。这是一个打开窗口并让你与 shell 交互的程序。终端是一个基于文本的界面,使用户能够与操作系统交互、执行命令、运行程序和管理文件,而不需要图形用户界面(GUI)。与图形用户界面(GUI)不同,终端需要你输入命令来执行任务,这使它成为一个强大的工具。

命令行界面

命令行界面

图形用户界面

图形用户界面

为什么使用 Git Bash?

Git Bash 是一个 Windows 终端仿真器,提供了 Bash 命令行体验。它允许你在 Windows 操作系统上使用 Git 命令和 Bash 脚本,弥合了 Windows 和 Unix/Linux 环境之间的差距。


开始我们的终端

我们将使用 Git bash 作为我们的终端。查看这个视频以安装 Git bash 到你的 PC 上。 安装后,右键单击鼠标并点击 Open Git Bash here。你应该会看到如下界面:

图像描述

好的,现在尝试输入一些乱码字符并按 Enter 键。

乱码

我们应该会收到一条错误消息,说明无法理解命令。

图像描述

太棒了!现在按上箭头键。观察之前的命令 ghdghkdhfoihsgkjndjkgnkj 如何响应。是的,我们有一个命令历史记录。当我们按下箭头键时,会返回到空行。如果需要,使用上箭头键重新调用 ghdghkdhfoihsgkjndjkgnkj 命令,然后尝试左右箭头键。文本光标可以在命令行的任何位置移动,使修复错误变得简单。


使用鼠标

尽管 shell 是一个命令行界面,但鼠标仍然很有用。

除了滚动终端窗口的内容外,鼠标还可以用于复制文本。按住左键拖动鼠标选择一些文本(例如,浏览器窗口中的 ghdghkdhfoihsgkjndjkgnkj)。文本会被高亮显示。释放左键并将鼠标指针移到终端窗口,然后点击中键(或如果使用触摸板,则同时按下左键和右键)。浏览器窗口中高亮的内容应被复制到命令行中。

在终端中导航

对于不熟悉命令行的人来说,这部分内容需要特别关注,因为这些原则需要一些时间来掌握。

与 Windows 一样,Linux 系统上的文件按层次结构组织。这意味着它们以树状结构组织,目录(在其他系统中称为文件夹)可能包含文件和子目录。根目录是文件系统中的初始目录。根目录包含文件和子目录,子目录中又包含其他文件和子目录,依此类推。大多数图形环境都包含一个文件管理工具,允许你查看和控制文件系统的内容。我们经常看到文件系统如下图所示。

图像描述

学习在终端中导航就像学习在新城市中导航一样。以下是一些基本命令以帮助你入门:

  • 基本命令

    • pwd(打印工作目录):显示当前所在的目录。

    Image description

    • ls:列出当前目录中的文件和目录。

    Image description

    • cd:更改目录。要更改工作目录,我们使用 cd 命令。为此,键入 cd 后跟目标工作目录的路径名。路径名是我们在文件树中从根目录到达目标目录的路径。路径名可以分为两种类型:绝对路径名和相对路径名。我们先从绝对路径名开始。

    绝对路径名从根目录开始,沿着树的每个分支逐步前进,直到路径到达目标目录或文件。例如,大多数文档保存在系统中的某个目录中。该目录的路径名是 /Onedrive/Documents。这表示从根目录(由路径名中的开头斜杠表示),有一个名为 "Onedrive" 的目录,其中包含另一个名为 "Documents" 的目录。 我们来看看:

    Image description 现在我们可以看到我们已将当前工作目录移动到 /OneDrive/Documents,其中充满了文件。注意到 shell 提示符已更改了吗?它通常配置为显示当前工作目录的名称,方便使用。

    绝对路径名从根目录开始,并通向目标,而相对路径名则从工作目录开始。为了实现这一点,它使用一些特殊的符号来表示文件系统树中的相对位置。这些特殊符号包括 "."(点)和 ".."(点点)。

    "." 符号指代工作目录本身,而 ".." 符号指代其父目录。它是这样工作的。让我们再次将工作目录更改为 /OneDrive/Documents。

    Image description

    那么,假设我们想将工作目录切换到 /OneDrive/Documents 的父目录,即 /OneDrive。我们可以用两种不同的方式来实现。首先使用绝对路径名:

    Image description

    或者使用相对路径名:

    Image description

    这两种不同的方法得到了相同的结果。我们应该使用哪种方法?你认为打字最少的那个! 类似地,我们可以用两种不同的方式将工作目录从 /OneDrive 移动到 /OneDrive/Documents。首先使用绝对路径名:

    Image description

    或者使用相对路径名:

    Image description

    你需要注意的是,有一点非常重要。在大多数情况下,我们可以省略 "./"。这是建议的做法。键入:

    Image description 将会执行相同的操作。一般来说,如果我们没有提供路径名,系统会默认使用当前工作目录。

    更多 Bash 导航命令

    • mkdir(创建目录) 创建新目录: 在当前目录下创建一个新文件夹。

       mkdir new_folder
      
    • rmdir(删除目录) 删除空目录: 删除一个不包含任何文件的文件夹。

       rmdir old_folder
      
    • rm(删除) 删除文件: 删除当前目录中的一个文件。

       rm file.txt
      

      删除目录及其内容: 删除目录及其中的所有内容。

       rm -r folder_name
      
    • cp(复制) 复制文件: 将一个文件从一个位置复制到另一个位置。

       cp source.txt destination.txt
      

      复制目录: 复制一个目录及其内容。

       cp -r source_folder/ destination_folder/
      
    • mv(移动或重命名) 移动文件或目录: 将文件或目录移动到不同的位置。

       mv file.txt /path/to/destination/
      

      重命名文件或目录: 更改文件或目录的名称。

       mv old_name.txt new_name.txt
      
    • touch 创建空文件: 创建一个新的空文件或更新现有文件的时间戳。

       touch newfile.txt
      
    • cat(连接) 查看文件内容: 在终端中直接显示文件的内容。

       cat file.txt
      
    • less 逐页查看文件内容: 打开文件,一次查看一页。

       less file.txt
      
      • 使用 q 退出。
    • find 搜索文件和目录: 按名称查找文件或目录。

       find . -name "filename.txt"
      
      • 在特定目录中搜索:
       find /path/to/search -name "filename.txt"
      
    • grep 在文件中搜索: 查找文件中的特定字符串。

       grep "search_term" file.txt
      
      • 递归搜索目录中的所有文件:
       grep -r "search_term" /path/to/directory
      

    这些命令是 Bash 中文件系统导航的基础。理解并练习这些命令将大大提高你在终端中工作的效率。