Shell 编程

2025-06-07

Shell 编程

在当今快速发展的科技领域,掌握命令行可以简化开发人员的开发流程。您可以通过各种 Shell 环境(例如 Bash 和 PowerShell)访问命令行。本文将探讨 Shell 环境,展示其在执行复杂操作、浏览文件、处理数据和文本操作中的作用。

shell的定义

Shell 是一种用户界面,允许用户使用基于文本的命令与计算机操作系统进行交互。可以将其视为用户和操作系统之间的翻译器。Shell
接收用户输入的可读命令,并将其转换为操作系统能够理解和执行的指令,并将这些命令的结果或输出显示给用户。这种交互方式称为命令行界面 (CLI),与图形用户界面 (GUI) 相比,它能够让您更直接地控制系统。
使用命令行界面,您可以运行程序、管理文件以及执行各种任务。

壳牌的重要性

  • Shell 允许用户与操作系统进行交互。这使得通过键入特定命令来执行复杂任务变得更加容易。
  • 它允许用户使用编写的 shell 脚本自动执行重复性任务。
  • 它帮助管理员和用户通过 SSH 等协议访问远程系统
  • 它可用于访问和管理文件和目录。
  • 它诊断问题并检查系统状态。

Shell 环境

有几种可用的 Shell,每种都有其独特的功能和语法。一些最常用的 Shell 包括:

  • 伯恩再次壳(BASH)
  • PowerShell
  • Z Shell(ZSH)

Bourne-Again Shell(BASH):这是 Linux 发行版和 macOS 上的 Shell 之一。它的语法与原始 Unix Shell 兼容,因此很受欢迎。

PowerShell: PowerShell是Windows系统默认预装的shell环境,是面向对象的。

Z Shell(ZSH): Zsh 以其丰富的自定义选项和高级功能而闻名。它提供了改进的 Tab 补全、历史记录管理和插件支持。

本文使用 Bash shell 来执行代码示例和命令。如果您不熟悉 Bash,可以考虑使用 Windows 版 Git Bash 或 macOS 内置的终端应用。两者都提供了类似 Bash 的体验,您可以按照本文的步骤操作。

Shell 导航和操作

通过命令行浏览文件系统是掌握 Shell 环境的基础技能之一。更改目录、管理文件和理解路径名的能力对于高效的命令行操作至关重要。在 Windows 系统中,目录被称为文件夹。
用于浏览文件系统的各种命令包括:

命令 功能
cd(更改目录) 此命令用于更改工作目录。您可以输入 cd 并加上目录名称或路径来切换到其他目录。例如:cd newfile.
pwd(打印工作目录) 此命令显示您正在使用的当前目录的路径。
ls 此命令用于列出目录的内容。

shell 中的 cd、pwd、ls

命令语法

一些命令包含一些可以修改其功能的组件。这些组件称为选项和参数。
选项用于调整命令的操作,而参数则是命令所操作的对象。例如:
ls -l myfile
-l 是选项,而 myfile 是参数。

下面是包含命令选项及其功能的表格:

命令 功能
ls -a 列出所有文件内容,包括隐藏文件
ls -t 按最后修改时间列出所有文件内容
光盘 - 这将带你进入上一个目录
光盘 .. 这将带你进入父目录
cd ~用户名 这将带你进入指定用户名的目录
rm -r 这将删除目录及其内容。
ls -l 以长格式列出所有文件内容
ls -al 以长格式列出所有文件内容,包括隐藏文件。

Linux Shell 中的 ls

文件和目录操作

  • mkdir:该命令用于创建目录,例如:mkdir newDirectory

  • touch:该命令创建一个空文件,例如:touch Mynewfile创建一个名为“Mynewfile”的文件

  • mv:此命令既可以移动文件/目录,也可以重命名它们,例如:mv oldfile newfile,这会将 oldfile 移动或重命名为 newfile。

  • cp:此命令用于复制文件和目录,例如:cp Myfile backup将“Myfile”复制到“backup”目录。

  • rm:该命令删除文件,例如:rm unwanted.txt

  • rmdir:此命令删除空目录,例如:rmdir emptydir

shell 中的 mkdir、touch、mv、cp、rm、rmdir

文件处理和文本处理

使用文件和目录:

有一些文本编辑器允许您直接从命令行创建、查看和修改文本文件。一些流行的文本编辑器包括:

查看文件内容

  • cat: cat 命令在终端中显示文件的全部内容,例如:cat filename

  • less: less 命令允许您一次一屏地查看文件的内容,从而实现导航和搜索。

  • head 和 tail:这些命令分别显示文件的第一行或最后几行。

猫,小,头和尾在壳里

使用 grep、sed 和 awk 进行文本处理

  • grep: grep 命令是一个强大的工具,用于在文件中搜索特定模式或文本。它可以与其他命令结合使用,以实现更高级的操作。

例子:grep "keyword" myFile

shell 中的 grep

  • sed: sed 命令是流编辑器的缩写,它对输入流执行文本转换。它对于在文件中查找和替换文本特别有用。

例如:sed 's/old/new/' myfile这将在名为“myfile”的文件中将“old”替换为“new”

  • awk: awk 命令逐行处理和分析文本。它通常用于数据提取和报告。

语法:awk 'pattern { action }' file
pattern指定执行操作的条件。
action是模式匹配时要执行的代码块。
file是要处理的输入文件。如果未指定,awk 将从标准输入读取。

例如:awk '{sum += $1} END {print sum}' myfile,这将计算一列中数字的总和并打印它们的总和。

使用 Shell 进行远程系统管理

通过安全外壳 (SSH) 等协议可以访问远程系统。SSH 是一个私钥,可用于访问远程服务器;它通过加密用户计算机与远程服务器之间的通信来确保连接的安全。

工作原理简介

要建立 SSH 连接,管理员需要提供远程服务器的地址和身份验证凭据,例如用户名和密码或密钥对


ssh your_username@remote-machine-address

将“your_username”替换为您的实际用户名,将“remote-machine-address”替换为提供的地址。

如果您使用基于密钥的身份验证,它可能看起来像这样:


ssh -i /path/to/your/private/key your_username@remote-machine-address

如果您在输入时没有看到字符,请不要担心;这是一项安全功能。
启用后,管理员可以在远程计算机上执行命令、管理文件以及执行各种管理任务。

文件权限和所有权

操作系统在 Shell 环境中提供对文件和目录的访问权限。这决定了可以对文件和目录执行哪些操作。这允许远程工作人员从其他系统访问文件。您可以使用ls -l命令查看文件的权限设置。
基本权限类型有三种:

  • 读取 (r):这允许用户查看目录或文件内容。
  • 写入 (w):这允许用户修改或删除文件,以及创建或删除目录中的文件。
  • 执行(x):授予文件执行的权限。

文件权限针对三类用户设置:

  • 所有者:创建文件或目录的用户。
  • 组:一组用户。
  • 其他人:不属于所有者或群组类别的任何人。
  - 读写权限
    | | |
   所有者组用户

这意味着文件所有者、组和其他人可以读取、写入和执行该文件。 - 表示它是一个文件, d 表示它是一个目录。
rw-rw-rw- 表示文件所有者、组和其他人只能读取和写入该文件。

文件权限也可以用数字表示

数字表示是一个三位数字,其中每个数字对应一个权限类型和用户类别。

-rwx rwx r--
    | | |
   111 111 100

二进制中的 111 = 7,二进制中的 100 = 4
因此 -rwx rwx r-- 以数字形式表示为 774。

更改权限

chmod命令用于修改文件权限。您可以用数字或符号更改权限。
数字示例:chmod 774 myfile
符号示例:chmod u+rwx myfile

更改所有权(chown)

chown命令用于更改文件或目录的所有者和组。

chown username filename
这将所有权分配filename给名为username

chown username:groupname filename
这将把 的所有权分配filename给名为的用户username,并将组所有权设置为groupname

chown -R username:groupname directory
这将以递归方式将所有文件和子目录的所有权更改directoryusernamegroupname

输入和输出重定向

Linux 操作系统中有三种用于输入和输出的标准流。

  • 标准输入(stdin)
  • 标准输出(stdout)
  • 标准错误(stderr)

标准输入 (stdin):这是程序读取输入的默认流。默认情况下,stdin 是键盘。
标准输出 (stdout):这是程序写入输出的默认流。默认情况下,stdout 是终端。
标准错误 (stderr):这是程序写入错误消息的默认流。默认情况下,stderr 也是终端,与 stdout 分开,以便单独重定向错误消息。

重定向是操作命令输入和输出的一项重要技术。
重定向允许你重定向命令的输出位置以及命令的输入位置。

  • 输出重定向:>符号用于将命令的输出重定向到文件。如果文件不存在,则创建;如果文件存在,则覆盖。例如:cat myfile > newfile将 myfile 的内容重定向到 newfile。

  • 附加重定向:>>符号类似于输出重定向,但它不会覆盖文件,而是将输出添加到现有文件的末尾。例如:cat myfile >> newfile将 myfile 的内容添加到 newfile 内容的末尾。

  • 输入重定向:<从文件重定向输入。

    示例:sort < unsorted_list.txt从 unsorted_list.txt 获取输入并对其进行排序。

  • 错误重定向(2> 和 2>>):

    2>将 stderr 重定向到文件,如果文件存在则覆盖该文件。
    2>>如果文件存在,则将 stderr 追加到文件;如果文件不存在,则创建一个新文件。
    示例:命令2> error_log.txt将 command 的错误消息重定向到 error_log.txt 文件。

管道 (|)

管道 | 用于将一个命令的输出作为另一个命令的输入。它用于连接多个命令。
ls -l | grep "file"
在上面的例子中,该ls -l命令以详细格式列出文件,然后使用 grep 过滤输出,仅显示包含单词“file”的行。


在下一篇文章中,我们将研究高级 shell 技术。

封面图片

文章来源:https://dev.to/ollie20/shell-programming-4k65
PREV
完整的 ES2022 备忘单!
NEXT
ES2020:新功能和示例摘要🔥🤠入门🤖ES2020 功能