编写 Shell 脚本处理命令输出

Red Hat Enterprise LinuxBeginner
立即练习

介绍

在本挑战中,你将学习如何创建一个简单的 Shell 脚本来处理 Shell 命令的输出。这是实现任务自动化以及从命令行工具中提取特定信息的关键技能。你将学习如何捕获命令输出、操作数据,并在脚本中使用这些处理后的信息。本挑战将帮助你掌握系统管理中必不可少的实用脚本编写技巧。

这是一个「挑战」项目,它与「引导实验」的不同之处在于,你需要尝试独立完成挑战任务,而不是按照实验步骤一步步学习。挑战通常具有一定的难度。如果你觉得困难,可以与 Labby 讨论或查看解决方案。历史数据显示,这是一个通过率为 89%初学者 级别挑战。它在学习者中获得了 98% 的好评率。

创建处理命令输出的 Shell 脚本

在这一步骤中,你将创建一个 Shell 脚本,用于捕获 ls -l 命令的输出,提取特定信息(文件大小和文件名),并以格式化的方式显示出来。此练习演示了如何解析命令输出,这是 Shell 脚本编写中的常见任务。

任务

  • 创建一个捕获 ls -l 命令输出的 Shell 脚本。
  • 从每个文件的 ls -l 输出中提取文件大小和文件名。
  • 以特定的格式显示提取的信息。

要求

  • ~/project/scripts 目录下创建脚本。

  • 脚本命名为 process_ls.sh

  • 脚本必须以 #!/bin/bash 解释器声明(shebang)开头。

  • 脚本应捕获 ls -l 命令的输出并将其存储在变量中。

  • 对于 ls -l 输出中列出的每个文件,提取其大小和名称。

  • 按照以下格式显示提取的文件大小和文件名:

    File size: <file_size> bytes
    File name: <file_name>

    <file_size> 替换为实际的文件字节大小,将 <file_name> 替换为实际的文件名。

示例

假设你的目录中有一些文件。运行脚本时,输出应类似于:

[labex@host ~]$ cd ~/project/scripts
[labex@host scripts]$ nano process_ls.sh
[labex@host scripts]$ chmod +x process_ls.sh
[labex@host scripts]$ ./process_ls.sh
File size: 1300 bytes
File name: process_ls.sh
[labex@host scripts]$

具体的文件大小和名称将取决于你当前目录的内容。

提示

  • 你可以使用命令替换(例如 variable=$(command))来捕获命令的输出。
  • 要处理命令输出的每一行,可以使用 while read 循环。
  • ls -l 命令提供了详细信息。你可能需要使用 awkcut 等工具从输出的每一行中提取特定的列(字段)。
  • 请记住,ls -l 输出的第一行通常以「total」开头,在处理单个文件时应跳过该行。
  • 确保你的脚本具有执行权限(chmod +x)。
✨ 查看解决方案并练习

总结

在本挑战中,你学习了如何创建 Shell 脚本来处理命令的输出。具体来说,你捕获了 ls -l 的输出,提取了文件大小和名称,并以格式化的方式进行了展示。此练习演示了 Shell 脚本编写的核心概念,如命令替换、while read 循环以及使用 awk 进行文本处理。这些技能对于自动化任务、解析日志文件以及从各种命令行工具中提取特定数据至关重要,也是 RHCSA 考试和日常系统管理工作的常见要求。