linux - 在 unix bash 脚本中组织代码

标签 linux bash unix

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

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

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

是否可以这样做,尤其是作为新手?

最佳答案

有几件事你可以看看,例如在 bash 中使用别名并将它们存储在 bashrc 或由 bashrc 调用的单独文件中

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

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

您还可以研究在代码中使用函数(上面链接的主文件夹中有很多 bash 脚本以理解函数浏览 this site :),其中有更好的示例...

在此处查看脚本中的一些管道尾部 pipe tail output into another script

bash 的优点在于它的灵 active ,例如,如果某些东西开始变得对 bash 来说太乱,你总是可以编写一个 perl/Java 任何语言,然后从你的 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 可以重用,它有很多功能,也可以让您深入了解如何简化许多日常重复命令,例如需要管道的命令,可以编写一个别名来完成所有这些操作他们给你..

关于linux - 在 unix bash 脚本中组织代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17955449/

相关文章:

bash - iTerm2 选项卡名称更改;这个 bash 命令是什么?

C:在接收到信号时停止执行并跳转到程序中的特定点

linux - 如何在 unix 中获取变量(参数扩展)的变量值?

linux - super 终端使用的TCP/IP通信协议(protocol)?

c - 将 C 程序输出保存到文本文件

允许进程在后台执行的 Shell 的 C 代码 (bash)

Bash 在循环中设置一个全局变量并保留它的值——或者进程替换为假人

c - 在 fork() 程序中首先执行什么? parent 还是 child ?

python - 在 SCO 5.0.5 上安装 python 2.5 需要什么

linux - 如何检查 CUDA 内核中的 malloc() 故障?