10

我习惯于面向对象编程。现在,我刚刚开始通过 linux 学习 unix bash 脚本。

我有一个unix脚本。我想把它分解成“模块”或者最好是类似于“more”、“ls”等的程序,然后使用管道将我的所有程序链接在一起。例如,“一些输入” myProg1 | 我的Prog2 | 我的Prog3。

我想组织我的代码并使它看起来更整洁,而不是全部在一个脚本中。此外,进行测试和开发也很容易。

有可能做到这一点,尤其是作为新手吗?

4

3 回答 3

7

您可以查看一些内容,例如在 bash 中使用别名并将它们存储在 bashrc 或由 bashrc 调用的单独文件中

这将使运行命令更容易..

take a look here for expanding commands into aliases (simple aliases are easy)

您还可以查看在代码中使用函数(上面链接的主文件夹中有很多 bash 脚本来理解函数,请浏览此站点:),其中有更好的示例......

在这里查看一些管道尾部到脚本 管道尾部输出到另一个脚本

bash 的优点是它的灵活性,例如,如果某些东西开始变得对 bash 来说太混乱,你总是可以编写一个 perl/Java any lang,然后从你的 bash 脚本中调用它,捕获它的输出并做其他事情。

不确定为什么这里的所有管道可能会有所帮助:

./example.sh 20
function one starts with 20
In function 2 20 + 10 = 30
Function three returns 10 + 10 = 40
------------------------------------------------

------------------------------------------------
Local function variables global:
Result2: 30 - Result3: 40 - value2: 10 - value1: 20

剧本:

例子.sh

#!/bin/bash

input=$1;

source ./shared.sh

one

echo "------------------------------------------------"



echo "------------------------------------------------"
echo "Local function variables global:"
echo "Result2: $result2 - Result3: $result3 - value2: $value2 - value1: $value1"

共享.sh

function one() {
        value1=$input
        echo "function one starts with $value1"
        two;
}

function two() {
        value2=10;
        result2=$(expr $value1 + $value2)
        echo "In function 2 $value1 + $value2 = $result2"
        three;
}
function three()  {
        local value3=10;
        result3=$(expr $value2 + $result2;)
        echo "Function three returns $value2 + $value3 = $result3"
}

我认为你的意思的管道实际上可以是函数,每个函数都可以相互调用..然后你给脚本它通过函数传递的值..

bash 在传递值方面非常灵活,只要之前调用的函数具有变量,它调用的下一个函数就可以重用它或者可以从主程序调用

我还拆分了可以由另一个脚本获取的功能以执行相同的功能

E2A 感谢您的支持,我也决定包含此链接

http://tldp.org/LDP/abs/html/sample-bashrc.html

有一个很棒的 .bashrc 可以重用,它有很多功能,还可以让您深入了解如何简化许多日常重复的命令,例如需要管道的命令,可以编写一个别名来为您完成所有这些命令..

于 2013-07-30T19:17:56.873 回答
2

你可以做一件事。就像 C 程序可以分为头文件和源文件以降低复杂性一样,您可以将 bash 脚本分为两个脚本 - 头文件和主脚本,但有一些区别。

头文件 - 这将包含所有定义的公共变量和定义的函数,它们将被您的主脚本使用。

您的脚本 - 这将只包含函数调用和其他逻辑。您需要在脚本中使用“source <“header-file path”> 开始获取脚本中可用的标头中声明的所有函数和变量。

于 2013-07-30T20:04:09.433 回答
0

Shell 脚本与 Unix 上的任何其他程序一样具有标准输入和输出,因此您可以在管道中使用它们。拆分脚本是一个很好的解决方案,因为您以后可以在管道中将它们与其他命令一起使用。

我按以下方式组织我的 Bash 项目:

  • 每个命令都放在自己的文件中
  • 可重用函数保存在一个文件中,该库文件只是一个只有函数的经典脚本
  • 所有文件都在同一个目录中,所以命令可以找到库$(dirname $0)/library
  • 配置作为环境变量存储在另一个文件中

为了清楚起见,您不应该使用全局变量在函数和主程序之间进行通信。

我为脚本准备了一个模板,其中准备了以下部分:

  • 带有名称和版权的标题
  • 读取配置source
  • 加载库source
  • 检查参数
  • 显示帮助的函数,如果要求或参数错误时调用

我最好的建议是:始终编写帮助功能,因为下一个需要它的人是……你自己!

要安装您的项目,您只需复制所有文件,并在配置文件中说明要配置的内容。

于 2013-07-31T11:00:50.177 回答