【问题标题】:Real life SHELL SCRIPTS usage?现实生活中的 SHELL SCRIPTS 用法?
【发布时间】:2011-05-13 15:10:44
【问题描述】:

我正在学习 UNIX/LINUX shell 脚本并试图考虑它的适当用法?

我想到的唯一一件事 - 让我们说备份操作和日志管理会很好......但我相信它远远超出了......或者是吗? 我确信这台服务器上每天都有人使用 Shell 脚本。 你能告诉我你在你的组织/业务中使用它吗?

谢谢:)

【问题讨论】:

  • 还有一个好处是您不需要大量的依赖项来完成工作(即 perl、python 等)。您通常可以使用结合在一个 shell 脚本中的大多数 shell 实用程序来完成大多数新安装的 Unix 衍生产品或考虑嵌入式系统(即 TinyBSD/NanoBSD、嵌入式 linux 等)

标签: bash unix shell ubuntu


【解决方案1】:

Why use shell scripts

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

【讨论】:

    【解决方案2】:

    你可以在 shell 中完成一切,但是很容易编写丑陋和缓慢的脚本。

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

    • 文件操作:列出、移动、复制、压缩、存档
    • 文本行操作:过滤(grep)、修改(sed)、删除行(sed)、合并文件(paste)、排序(sort)、统一( sort -u)

    所有这些操作都不是外壳操作,但外壳是将它们组合在一起的粘合剂。

    • 文件操作一般结合流控制指令(whileiffor
    • 线操作与管道|和命名管道mkfifo结合

    【讨论】:

      【解决方案3】:

      使用 shell 命令不到 20 行就可以完成的事情。

      我个人使用它来批处理各种每日/每周命令并启动长时间运行的进程。当它们变大时,它们可能很笨重且难以调试。未知变量评估为空字符串 (icky)。

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

      【讨论】:

      • 其实我真希望PHP有默认的变量扩展。
      【解决方案4】:

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

      所有这些设置起来都很痛苦。

      但情况会变得更糟:在任何时候,我都可能想要使用稳定版本、相当稳定但更新的版本、最前沿的每一个新功能版本,或我个人破解的开发版本。

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

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


      顺便说一句——我为此使用的脚本广泛使用了How do I manipulate $PATH elements in shell scripts? 的公认答案,因此您知道 Stack Overflow 在现实世界中对我有用。此外,我已经用这种技术感染了其他几个人。

      【讨论】:

      • 太酷了!我已经使用 SO 为我们在这里遇到的问题/错误提出解决方案。
      【解决方案5】:

      我见过并使用过用 Korn shell 编写的成熟应用程序(医疗记录和调度处理)。

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

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

      【讨论】:

        【解决方案6】:

        对于我们公司,我们使用以下 shell 脚本:

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

        【讨论】:

          【解决方案7】:

          直到看到OS启动脚本都写在里面,我才觉得bash编程特别强大。这让我重新审视了我的假设。我现在有几十个重要的 shell 脚本,这些脚本是我多年来编写的,可以自动执行一些常见任务。

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

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

          另一个遍历 homedirs 列表并更改相应 public_html 目录下所有文件的所有权,以匹配应该拥有它们以符合 suPHP 限制的用户。

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

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

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

          【讨论】:

            猜你喜欢
            • 2022-11-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-12-13
            • 2011-02-21
            • 1970-01-01
            相关资源
            最近更新 更多