Bash 真实的SHELL脚本使用情况?

Bash 真实的SHELL脚本使用情况?,bash,unix,shell,ubuntu,Bash,Unix,Shell,Ubuntu,我正在学习UNIX/LinuxShell脚本并尝试思考它的适当用法 我想到的唯一一件事是,它对于备份操作和日志管理来说是很好的……但我确信它远远超出了这一点……或者是真的? 我确信这台服务器上有人每天都在使用Shell脚本。 您能告诉我您在组织/业务中使用它的目的吗 谢谢:) 基本上,有许多与备份、维护等相关的任务需要自动化,shell脚本可以做到这一点。我从事一个在unix环境中运行的积极开发的软件项目。不幸的是,它使用了许多不同的环境变量进行配置,并将二进制程序、数据文件和共享库存储在依赖于

我正在学习UNIX/LinuxShell脚本并尝试思考它的适当用法

我想到的唯一一件事是,它对于备份操作和日志管理来说是很好的……但我确信它远远超出了这一点……或者是真的? 我确信这台服务器上有人每天都在使用Shell脚本。 您能告诉我您在组织/业务中使用它的目的吗

谢谢:)


基本上,有许多与备份、维护等相关的任务需要自动化,shell脚本可以做到这一点。

我从事一个在unix环境中运行的积极开发的软件项目。不幸的是,它使用了许多不同的环境变量进行配置,并将二进制程序、数据文件和共享库存储在依赖于版本的路径上

所有这些都是一个痛苦的设置

但更糟糕的是:在任何时候,我都可能想要使用稳定的版本,相当稳定但更为最新的版本,每一个新功能版本的最新版本,或者我个人的黑客开发版本

在它们之间切换是一个更大的麻烦

输入一个shell脚本,确保一次只设置一个版本。Ta da



顺便说一句——我用于此的脚本广泛使用了的公认答案,所以您知道堆栈溢出在现实世界中对我很有效。此外,我还用这项技术感染了其他一些人。

使用shell命令,您可以在不到20行的时间内完成一些事情

我个人使用它来批处理杂项每日/每周命令,并启动长时间运行的流程。当它们变大时,它们可能会变得笨拙且难以调试。未知变量计算为空字符串(icky)


随着代码变得越来越复杂,Python、Perl和Ruby等脚本语言变得越来越吸引人。

我已经看过用Korn shell编写的成熟应用程序(医疗记录和日程安排处理),并对其进行了研究

批量编程、PostScript打印过滤器、自动邮寄和自动航空公司登记系统、定期股票价格跟踪、软件安装等


更好的问题=什么不能在Shell中编程?

对于我们公司,我们使用Shell脚本实现以下功能:

备份—如果数据丢失,对我们来说将是灾难性的。我们备份的各个部分,如数据库备份、异地备份、连续备份等,都使用每天运行的shell脚本,有些脚本每周运行一次。 更新日期-由于防火墙限制,我们不使用ntp,因此我们依靠sh脚本更新日期。 日志清理 发送电子邮件

您可以在shell中完成所有事情,但编写难看且缓慢的脚本很容易

Shell的第一个专业领域是启动和合并其他程序。这非常适合:

  • 文件操作:列表、移动、复制、压缩、存档
  • 文本行操作:筛选(
    grep
    ),修改(
    sed
    ),删除行(
    sed
    ),合并文件(
    粘贴
    ),排序(
    排序
    ),统一(
    排序-u
所有这些操作都不是shell操作,但是shell是将它们结合在一起的粘合剂

  • 文件操作通常与流控制指令结合使用(
    while
    if
    for
  • 行操作与管道
    |
    和命名管道
    mkfifo

在看到操作系统启动脚本都是用bash编写的之前,我并不认为bash编程特别强大。这让我重新审视了我的假设。我现在有几十个重要的shell脚本,这些脚本是我多年来编写的,用于自动化一些常见任务

例如,我编写了一个轮询当前负载平均值的命令,然后在超过某个值时执行提供的命令(用于检查每天只发生一次或两次的事件)

我编写的另一个数据库遍历服务器上的所有mysql数据库,并将每个数据库的
mysqldump
输出到其自己适当命名的
.sql
文件中

另一个会遍历HomeDir列表,并更改相应的
public_html
dir下所有文件的所有权,以匹配应拥有这些文件的用户,从而符合SUPPP的限制

另一个检查当前硬件配置,并下载、安装和配置适当的软件,以监控当前连接的RAID控制器的运行状况

这些都是相对简单的任务,可以手工完成——但每当我发现自己不止一次地做同一个任务时,我就会编写一个shell脚本来自动化这个过程


我还在bash中构建了一个base-64解码器,看看是否可以。它能工作,但速度非常慢。我使用shell脚本来完成主要涉及执行其他程序的简单任务。当需要大量的字符串处理时,我经常使用Perl,对于更复杂的脚本任务,我使用Python。你知道的语言越多,你就越能为工作选择合适的语言。

还有一件很棒的事情,那就是你不需要太大的依赖关系来完成工作(如perl、python等)。您通常可以使用结合在shell脚本中的大多数shell实用程序在大多数新安装的Unix衍生产品上完成很多工作,或者想想嵌入式系统(例如TinyBSD/NanoBSD、嵌入式linux等),这很酷!我用它来提出我们在这里遇到的问题/bug的解决方案。实际上,我真的希望PHP有默认的变量扩展。