当前位置:网站首页 > Shell脚本编程 > 正文

shell编程实战(shell编程实战案例)



历史上,shell 一直是类 Unix 系统的本地命令行解释器。它已被证明是 Unix 的主要功能之一,并发展成为一个全新的主题。Linux 提供了各种功能强大的 shell,包括 Bash、Zsh、Tcsh 和 Ksh。这些外壳最令人惊讶的特性之一是其可编程性。创建简单而有效的 Linux shell 脚本来处理日常工作非常容易。

程序员经常通过学习 hello world 程序来学习新语言。这是一个简单的程序,将字符串 “HelloWorld” 打印到标准输出中。然后,使用 vim 或 nano 等编辑器创建 hello-world.sh 文件,并将以下行复制到其中。

保存并退出文件。接下来,您需要使用以下命令使该文件可执行。

可以使用以下两个命令中的任何一个来运行此命令。

它将打印出传递给脚本内部回显的字符串。

echo 命令用于在 bash 中打印信息。它类似于 C 函数 “printf”,并提供了许多常见选项,包括转义序列和重定向。将以下行复制到名为 echo.sh 的文件中,并使其可执行,如上所述。

运行脚本以查看其功能。-e 选项用于告诉 echo 传递给它的字符串包含特殊字符,需要扩展功能。

注释对文档很有用,是高质量代码库的要求。将注释放在处理关键逻辑的代码中是一种常见的做法。要注释掉一行,只需在其前面使用 #(hash)字符。例如,请查看下面的 bash 脚本示例。

此脚本将输出数字 60。首先,在某些行之前使用 #检查注释的使用方式。不过,第一行是一个例外。它被称为 shebang,让系统知道在运行这个脚本时要使用哪个解释器。

许多人使用多行注释来记录他们的 shell 脚本。在下一个名为 comment.sh 的脚本中检查这是如何完成的。

注意多行注释是如何放置在内部的:“和” 字符。

while 循环构造用于多次运行某些指令。查看以下名为 while.sh 的脚本,以更好地理解此概念。

方括号周围的空格是必填的。

for 循环是另一种广泛使用的 bashshell 构造,它允许用户高效地迭代代码。下面演示了一个简单的示例。

只有当条件为真时,才会执行这些语句。fi 关键字用于标记 if 语句的结尾。下面显示了一个快速示例。

如果通过输入提供的数字大于 10,上述程序将仅显示输出。-gt 表示大于;类似地 - lt 表示小于 - le 表示小于等于;且 - ge 表示大于等于。此外,还需要 [[]]。

将 else 构造与 if 结合起来,可以更好地控制脚本的逻辑。下面显示了一个简单的示例。

其他部分需要放在 if 的动作部分之后和 fi 之前。

AND 运算符允许我们的程序检查是否同时满足多个条件。由 AND 运算符分隔的所有部分必须为 true。否则,包含 AND 的语句将返回 false。查看下面的 bash 脚本示例,以更好地了解 AND 的工作原理。

AND 运算符由 && 符号表示。

OR 运算符是另一个关键的构造,它允许我们在脚本中实现复杂、健壮的编程逻辑。与 AND 相反,当 OR 运算符的任一操作数为真时,由 OR 运算符组成的语句返回真。仅当由 OR 分隔的每个操作数为假时,它才返回假。

这个简单的示例演示了 OR 运算符如何在 Linuxshell 脚本中工作。只有当用户输入数字 15 或 45 时,它才会宣布用户为获胜者。|| 符号表示 OR 运算符。

elif 语句代表 else if,并为实现链逻辑提供了一种方便的方法。通过评估以下示例,了解 elif 的工作原理。

上面的程序是不言自明的,所以我们不会逐行剖析它。相反,更改脚本中的变量名称和值等部分,以检查它们如何一起工作。

. switch 构造是 Linux bash 脚本提供的另一个强大功能。它可以用于需要嵌套条件的地方,但不希望使用复杂的 if-else elif 链。看看下一个例子。

条件写在 case 和 esac 关键字之间。*)用于匹配除 100 和 200 以外的所有输入。

在许多情况下,直接从命令 shell 获取参数是有益的。下面的示例演示了如何在 bash 中执行此操作。

运行此脚本时,在其名称后添加两个附加参数。我将其命名为 test.sh,调用过程概述如下。

因此,1、用于访问第一个参数;2、用于访问第二个参数,依此类推。最后,3、用于获取参数总数。

下面的示例显示了如何获取带有名称的命令行参数。

将此脚本命名为 test.sh,并按如下所示调用它。

它应该返回 X+Y=144。这里的参数存储在 “$@” 中,脚本使用 Linuxcut 命令获取它们。

字符串处理对于广泛的现代 bash 脚本来说非常重要。值得庆幸的是,它在 bash 中更加舒适,并允许以更精确、简洁的方式实现这一点。请参见下面的示例,了解 bash 字符串连接。

与许多编程语言不同,bash 不提供任何用于剪切字符串部分的内置函数。然而,下面的示例演示了如何使用参数展开来实现这一点。

该脚本应打印出 “学习 Bash 命令” 作为其输出。参数展开形式为 ${VAR_NAME:S:L}。这里,S 表示起始位置,L 表示长度。

可以在脚本中使用 Linux cut 命令来截取字符串的一部分,也就是子字符串。下一个示例显示了如何做到这一点。

在 Linux shell 脚本中执行算术运算非常容易。下面的示例演示了如何从用户接收两个数字作为输入并将它们相加。

如您所见,在 bash 中添加数字相当简单。

您可以使用循环获取多个用户输入并将其添加到脚本中。以下示例显示了这一点。

但是,省略 (()) 将导致字符串串联而不是相加。所以,在你的程序中检查类似的情况。

与任何编程方言一样,函数在 Linux shell 脚本中扮演着重要角色。它们允许管理员创建自定义代码块以供频繁使用。下面的演示将概述函数如何在 Linux bash 脚本中工作。

这里我们像以前一样添加了两个数字。但在这里,我们使用了一个名为 Add 的函数来完成这项工作。因此,每当您需要再次添加时,只需调用此函数,而不必再次编写该部分。

最神奇的功能之一是允许数据从一个函数传递到另一个函数。它在各种场景中都很有用。查看下一个示例。

这里,输出包含从 Greet()函数接收的数据。

使用 shell 脚本运行系统命令的能力使开发人员的工作效率大大提高。下面的简单示例将向您展示如何在 shell 脚本中创建目录。

该脚本只需调用标准 shell 命令 mkdir,并在仔细查看时将目录名传递给它。这个程序应该在文件系统中创建一个目录。您还可以传递命令以在 backticks(“)内部执行,如下所示。

如果当前工作目录中已包含同名文件夹,则上述程序将无法运行。例如,下面的程序将检查是否存在名为 $dir 的文件夹,如果找不到,则只创建一个。

使用 eval 编写此程序以提高 bash 脚本编写技能。

Bash 脚本允许用户非常有效地读取文件。下面的示例将展示如何使用 shell 脚本读取文件。首先,创建一个名为 editors.txt 的文件,其中包含以下内容。

此脚本将输出上述 5 行中的每一行。

以下程序将演示如何在 Linux shell 脚本中删除文件。程序将首先要求用户提供文件名作为输入,如果文件名存在,则将其删除。Linux rm 命令在此处执行删除操作。

让我们输入 editors.txt 作为文件名,并在要求确认时按 y。它应该删除该文件。

下面的 shell 脚本示例将向您展示如何使用 bash 脚本将数据附加到文件系统上的文件。它向早期的 editors.txt 文件添加了一行。

现在您应该注意到,我们直接从 Linux bash 脚本使用日常终端命令。

下一个 shell 脚本示例显示如何检查 bash 程序中文件的存在。

我们直接从命令行传递文件名作为参数。

从 bash 脚本发送电子邮件非常简单。下面的简单示例将演示一种从 bash 应用程序执行此操作的方法。

它将向收件人发送包含给定主题和消息的电子邮件。

下一个 bash 脚本示例将向您展示如何使用脚本处理日期和时间。同样,Linuxdate 命令用于获取必要的信息,我们的程序执行解析。

运行此程序以了解其工作原理。此外,尝试从终端运行 date 命令。

sleep 命令允许 shell 脚本在指令之间暂停。它在许多场景中都很有用,例如执行系统级作业。下一个示例显示了 shell 脚本中的 sleep 命令。

该程序暂停最后一条指令的执行,直到 $time 秒,在本例中,用户提供了这一点。

wait 命令用于暂停 Linux bash 脚本中的系统进程。查看下面的示例,详细了解这在 bash 中的工作方式。

有时,您可能需要为某些操作查找最后更新的文件。下面的简单程序向我们展示了如何在 bash 中使用 awk 命令执行此操作。它将列出当前工作目录中最近更新或创建的文件。 #!/bin/bash

为了简单起见,我们将避免在本示例中描述 awk 的功能。相反,您可以简单地复制此代码来完成任务。

下面的示例将对目录中的所有文件应用自定义扩展名。创建一个新目录,并将一些文件放在其中以供演示。我的文件夹共有五个文件,每个文件名为 test,后跟(0-4)。我已将此脚本编程为在文件末尾添加(.UP)。您可以添加所需的任何扩展名。

首先,不要从任何常规目录尝试此脚本;相反,请从测试目录运行此命令。此外,您需要提供文件的目录名作为命令行参数。对当前工作目录使用句点(.)。

下面的 Linuxbash 脚本查找给定目录中存在的文件或文件夹的数量。它使用 Linux find 命令来执行此操作。首先,需要传递目录名以从命令行搜索文件。

如果指定的目录不可用或存在权限问题,程序将要求用户重试。

下一个简单的示例演示了在现实生活中使用 shell 脚本的简便方法。该程序只需删除 / var/log 目录中的所有日志文件。您可以更改保存此目录的变量以清理其他日志。

请记住以 root 身份运行此 Linuxshell 脚本。

Shell 脚本提供了一种强大的方法来备份文件和目录。以下示例将备份过去 24 小时内修改的每个文件或目录。该程序使用 find 命令执行此操作。

备份过程成功后,它将打印文件和目录的名称。

下面的示例演示了通过 Linux bash 脚本快速确定用户是否为 root 用户的方法。

此脚本的输出取决于运行它的用户。它将根据 $UID 匹配根用户。

文件处理需要相当长的时间,并在许多方面阻碍了管理员的工作效率。例如,在文件中搜索重复项可能会成为一项艰巨的任务。幸运的是,您可以使用一个简短的 shell 脚本来完成此操作。

上面的脚本逐行遍历文件并删除所有重复的行。然后,它将新内容放入新文件,并保持原始文件的完整性。

我经常使用一个小的 Linuxshell 脚本来升级我的系统,而不是手动升级。下面的简单 shell 脚本将向您展示如何做到这一点。

该脚本还处理不再需要的旧包。您需要使用 sudo 运行此脚本,否则它将无法正常工作。

《168页Linux学习手册》

添加微信:chuanzhi100  回复关键词:Linux 免费领取

到此这篇shell编程实战(shell编程实战案例)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ssh免密登录执行shell(ssh免密码登录命令)2025-09-13 11:27:07
  • shell编程实战(shell编程教程)2025-09-13 11:27:07
  • shell编程视频教程(shell编程菜鸟教程)2025-09-13 11:27:07
  • shell编程简单实例(shell编程100例)2025-09-13 11:27:07
  • shell编程学习(shell编程总结)2025-09-13 11:27:07
  • shell编程总结(shell编程入门)2025-09-13 11:27:07
  • shell编程教程(shell编程入门)2025-09-13 11:27:07
  • shell编程基础(shell编程基础知识)2025-09-13 11:27:07
  • shell编程基本步骤(shell编程命令大全)2025-09-13 11:27:07
  • shell编程基础(shell编程基础任务分析)2025-09-13 11:27:07
  • 全屏图片