簡體   English   中英

在unix bash腳本中組織代碼

[英]Organize code in unix bash scripting

我習慣於面向對象的編程。 現在,我剛剛開始通過linux學習unix bash腳本。

我有一個unix腳本。 我想將其分解為“模塊”或最好是類似於“更多”,“ls”等的程序,然后使用管道將我的所有程序鏈接在一起。 例如,“一些輸入”myProg1 | myProg2 | myProg3。

我想組織我的代碼,讓它看起來更整潔,而不是一個腳本。 此外,它將很容易進行測試和開發。

是否可以這樣做,特別是作為一個新手?

您可以查看一些內容,例如在bash中使用別名並將它們存儲在bashrc或bashrc調用的單獨文件中

這將使運行命令更容易..

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

你也可以考慮在你的代碼中使用函數(在上面鏈接的主文件夾中有很多bash腳本來理解瀏覽這個站點的函數:)這里有更好的例子......

看看這里的一些管道尾部到腳本管道尾部輸出到另一個腳本

使用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

劇本:

example.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"

shared.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感謝您的upvote,我也決定加入此鏈接

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

有一個很棒的.bashrc可以重用,它有很多功能,它們也可以讓你深入了解如何簡化許多日常重復命令,例如需要管道,可以編寫一個別名來為你做所有這些命令..

你可以做一件事。 正如C程序可以分為頭文件和源文件以降低復雜性一樣,您可以將bash腳本划分為兩個腳本 - 標題和主腳本,但有一些差異。

頭文件 - 這將包含所有已定義的公共變量和定義的函數,這些變量將由主腳本使用。

您的腳本 - 這將只包含函數調用和其他邏輯。您需要在腳本中使用“source <”頭文件路徑“>”,以開始獲取腳本中可用的標頭中聲明的所有函數和變量。

Shell腳本像Unix上的任何其他程序一樣具有標准輸入和輸出,因此您可以在管道中使用它們。 拆分腳本是一個很好的解決方案,因為您以后可以在管道中使用其他命令。

我通過以下方式組織我的Bash項目:

  • 每個命令都放在自己的文件中
  • 可重用的函數保存在文件中,該文件只是一個只有函數的經典腳本
  • 所有文件都在同一目錄中,因此命令可以使用$(dirname $0)/library查找$(dirname $0)/library
  • 配置作為環境變量存儲在另一個文件中

為了清楚起見,不應使用全局變量來在函數和主程序之間進行通信。

我准備了一個腳本模板,准備了以下部分:

  • 帶有名稱和版權的標題
  • 使用source讀取配置
  • 使用source加載庫
  • 檢查參數
  • 顯示幫助的功能,如果要求或參數錯誤則調用

我最好的建議是:總是寫下幫助功能,因為下一個需要它的人就是......你自己!

要安裝項目,只需復制所有文件,並解釋配置文件中要配置的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM