主頁 > 軟體設計 > 還不懂shell腳本核心?這一篇就夠了。

還不懂shell腳本核心?這一篇就夠了。

2021-09-26 13:57:19 軟體設計

前言:

現在在我們已經知道了Linux系統和命令列的基礎知識,是時候開始編程了,本章討論撰寫 shell腳本的基礎知識,在開始撰寫自己的shell腳本前,你必須了解的基本概念都在這里,

一、多個shell命令的使用

shell 腳本的核心在于輸入多個命令并處理每個命令的結果,而且有時候需要將一個命令的結果傳給
另一個命令, shell 可以將命令串起來,依次執行完成,要依次將兩個命令一起運行,可以 把它們放在同一行中,彼此間用分號(;)隔開來,

這就是一個最簡單的shell腳本,運行了兩個shell命令,who命令先運行,輸出了當前是誰登錄了系統,而后運行了whoami,輸出的是當前有效用戶名,使用這個方式可以運行多個命令,他們都是以此串行的,

二、構建一個shell檔案

構建一個shell檔案,最簡單的理解就是將類似上述的命令放在一個文本檔案里,文本檔案的核心開頭是:

#!/bin/bash

#內容解釋:

在通常的shell腳本中,井號(#)用作注釋行,shell并不會處理shell腳本中的注釋行,而, shell腳本檔案的第一行是個例外,#后面的驚嘆號會告訴shell用哪個shell來運行腳本

該行內容必須放在文本的第一行,表示使用的shell型別;本文以常用的bash為例,更多了型別的shell可以參考此文,

在第一行的內容后面,就可以寫入你要執行的shell命令了,可以都寫在一行,用分號隔開,但是一般情況下,為了美觀和更高的辨識度,我們選擇一行寫一個命令,加上一個回車符,在輸入另一個命令,好比下圖:

推薦格式:

需要說明的是,你可以在文本中用"#"來注釋你的內容,這樣這些被注釋的內容,shell就不會識別和執行了,一般我們會在腳本中寫一些說明性的描述,這時需要用到"#",如下圖:

上述可以是一個完整的shell腳本了,可以直接保存為腳本檔案test1,但是此時我們如果直接執行test1檔案的話,還是不能達到效果的,會提示 command not found,這里就需要提到shell里的PATH環境變數的概念,shell 命令的查找都是通過環境變數的,

我們可以查看當前主機的環境變數:

此時我們的test1命令并沒有生效,如果我們想要使其神效,可以采用這兩個方式:

  • shell腳本檔案所處的目錄添加到PATH環境變數中;
  • 在提示符中用絕對或相對檔案路徑來參考shell腳本檔案;

經驗提示:

在centos Linux 發行版中,有的會將 $HOME/bin 目錄添加進了 PATH 環境變數,它在每個用戶的 HOME 目錄下提供了一個存放檔案的地方,shell 可以在那里查找要執行的命令;

在本文中,我們將用第二種方式將腳本檔案的確切位置告訴 shell ,記住,為了參考當前 目錄下的檔案,可以在shell 中使用單點運算子,如下圖:

核心說明:

執行時我們會發現還是沒有執行成功,此時可以看到終端列印了 " Permission denied",這報錯大家一定要熟悉起來,因為在以后的作業中,我們可能會遇到很多這種報錯,遇到這個問題我們的第一反應就應該是想到,有些檔案或者目錄,我們當前的用戶是沒有相關的權限導致,正如test1檔案,我們當前的test1用戶是沒有執行權限的,所以我們需要做的就是使用chmod 給檔案添加對應的權限,

chmod u+x test1 添加權限后:

此時腳本檔案就可以正常執行了,

實戰解說:

作業中我們創建的腳本檔案,一般都是用.sh 結尾的,這個是給我們電腦的使用者來識別用的,這樣我們就可以一眼識別這個檔案就是一個shell 腳本檔案,比如上面的test1檔案,我們通常是命名為test1.sh的,而且執行這個檔案的時候,我們可以有一個更簡單的方式,腳本對應的sh或bash來執行,好比上面的./test1 我們可以更換為 bash test1,會有同樣的效果,

三、終端列印訊息

很多時候shell都會輸出一定的內容到終端,我們如果也想在腳本中輸出一些內容到終端顯示,告訴執行腳本的人,這個腳本在執行哪些功能,這個時候我們就需要用到echo命令來輔助,

最簡單的輸出如下:

echo 命令會將跟在它后面的字串列印到終端螢屏,

注意,默認情況下,不需要使用引號將要顯示的文本字串劃定出來,但有時在字串中出現引號的話就比較麻煩了,
如下圖:

此時我們如果想要引號也輸出在終端的話,需要這樣做:echo "Let's see if this'll work"

核心總結:

echo 命令可用單引號或雙引號來劃定文本字串,如果在字串中用到了它們,你需要在
文本中使用其中一種引號,而用另外一種來將字串劃定起來,

此時我們就可以在腳本檔案中任意位置使用echo來輸出我們打算輸出的內容了,如下圖:

常用的組合命令引數:

  • -n 不換行輸出

  • -e 處理特殊字符

\a 發出警告聲;
\b 洗掉前一個字符;
\c 最后不加上換行符號;
\f 換行但游標仍舊停留在原來的位置;
\n 換行且游標移至行首;
\r 游標移至行首,但不換行;
\t 插入tab;
\v 與\f相同;
\ 插入\字符;
\nnn 插入nnn(八進制)所代表的ASCII字符;

實戰解說:

在實際的使用中,我們通常也會使用echo 配合>>將內容追加到文本檔案中,如下圖:

四、變數的使用

有些時候我們會需要在 shell 命令使用 其他資料來處理資訊,這可以通過變數來實作,變數允許臨時性地將資訊存盤在shell 腳本中, 以便和腳本中的其他命令一起使用,

4.1 環境變數

shell維護著一組環境變數,用來記錄特定的系統資訊,比如系統的名稱、登錄到系統上的用 戶名、用戶的系統ID (也稱為 UID )、用戶的默認主目錄以及 shell 查找程式的搜索徑,可以用 set命令來顯示一份完整的當前環境變數串列,
如下圖:

【...】

在腳本中,變數的使用格式是:$變數名稱

下面是變數在腳本中的使用,可以看到

實戰解說:

如上文中的$HOME,我們一般還可以寫成${HOME} 這兩者的效果是等同的,而且需要注意的是,我們在$符號之前不能只是\,這樣變數就會失效了,另一個需要注意的是,當你的變數需要和一個字串連用的時候,此時一定要用{}的形式,否則變數會失效,如下圖演示:

變數用{}包括起來:

4.2 用戶變數

除了環境變數, shell 腳本還允許在腳本中定義和使用自己的變數,定義變數允許臨時存盤數
據并在整個腳本中使用,從而使 shell 腳本看起來更像一個真正的計算機程式,
用戶變數可以是任何由字母、數字或下劃線組成的文本字串,長度不超過 20 個,用戶變數
區分大小寫,所以變數 Var1 和變數 var1 是不同的,這個小規矩經常讓腳本編程初學者感到頭疼,
使用等號將值賦給用戶變數,在變數、等號和值之間不能出現空格(另一個困擾初學者的用
法),這里有一些給用戶變數賦值的例子,

變數示例:

var1=10
var2=-57
var3=testing
var4="still more testing"
shell 腳本會自動決定變數值的資料型別,在腳本的整個生命周期里, shell 腳本中定義的變數 會一直保持著它們的值,但在shell 腳本結束時會被洗掉掉, 與系統變數類似,用戶變數可通過$參考,
示例截圖:

核心解說:

變數每次被參考時,都會輸出當前賦給它的值,需要記住的是,參考一個變數值時需要使 用$符,而參考變數來對其進行賦值時則不要使用美元符,看下面的例子,
演示截圖:

如果沒有使用$符, shell 會將變數名解釋成普通的文本字串,通常這并不是你想要的結果,

4.3命令替換

shell 腳本中最有用的特性之一就是可以從命令輸出中提取資訊,并將其賦給變數,把輸出賦
給變數之后,就可以隨意在腳本中使用了,這個特性在處理腳本資料時尤為方便,

兩種操作方式:

  • 反引號字符(`)
  • $()

核心解說:

需要注意反引號字符,這可不是用于字串的那個普通的單引號字符,由于在 shell 腳本之外很 少用到,你可能甚至都不知道在鍵盤什么地方能找到這個字符,但你必須慢慢熟悉它,因為這是 許多shell 腳本中的重要組件,提示:在美式鍵盤上,它通常和波浪線( ~ )位于同一鍵位, 命令替換允許你將shell 命令的輸出賦給變數,盡管這看起來并不那么重要,但它卻是腳本編 程中的一個主要組成部分,
如下示例:
用一對反引號把整個命令列命令圍起來:
day='date'
使用 $() 格式:
day=$(date)
shell 會運行命令替換符號中的命令,并將其輸出賦給變數 testing ,注意,賦值等號和命令
替換字符之間沒有空格,這里有個使用普通的 shell 命令輸出創建變數的例子,

實戰詳解:

命令替換會創建一個子 shell 來運行對應的命令,子 shell subshell )是由運行該腳本的 shell
所創建出來的一個獨立的子 shell child shell ),正因如此,由該子 shell 所執行命令是無法使用腳本中所創建的變數的,
在命令列提示符下使用路徑 ./ 運行命令的話,也會創建出子 shell ;要是運行命令的時候 不加入路徑,就不會創建子shell ,如果你使用的是內建的 shell 命令,并不會涉及子 shell , 在命令列提示符下運行腳本時一定要留心!

五、重定向輸入和輸出

很多時候想要保存某個命令的輸出而不僅僅只是讓它顯示在顯示幕上, bash shell 提供了幾 個運算子,可以將命令的輸出重定向到另一個位置(比如檔案),重定向可以用于輸入,也可以 用于輸出,可以將檔案重定向到命令輸入,

5.1 輸出重定向

最基本的重定向將命令的輸出發送到一個檔案中, bash shell 用大于號( > )來完成這項功能:
使用格式:
command > outputfile
之前顯示幕上出現的命令輸出會被保存到指定的輸出檔案中,

重定向運算子創建了一個檔案1.txt (通過默認的 umask 設定),并將echo 命令的輸出重定向
到該檔案中,如果輸出檔案已經存在了,重定向運算子會用新的檔案資料覆寫已有檔案,
很多時候我們可能并不想覆寫檔案原有內容,而是想要將命令的輸出追加到已有檔案中,比如在創建一個記錄系統上某個操作的日志檔案,在這種情況下,可以用雙大于號(>> )來追加資料,

可以看到,who命令產生的內容并沒有覆寫1.txt中已有的內容,而是追加到檔案的末尾,

5.2 輸入重定向

輸入重定向和輸出重定向正好相反,輸入重定向將檔案的內容重定向到命令,而非將命令的
輸出重定向到檔案,
輸入重定向符號是小于號( < ):
命令格式:
command < inputfile
一個簡單的記憶方法就是:在命令列上,命令總是在左側,而重定向符號“指向”資料流動
的方向,小于號說明資料正在從輸入檔案流向命令,

wc命令可以對對資料中的文本進行計數,默認情況下,它會輸出3個值:
  • 文本的行數
  • 文本的詞數
  • 文本的位元組數
通過將文本檔案重定向到 wc 命令,你立刻就可以得到檔案中的行、詞和位元組的計數,這個例
子說明1.txt 檔案有 2 行、 11 個單詞以及83 位元組,
還有另外一種輸入重定向的方法,稱為 行內輸入重定向 inline input redirection ),這種方法
無需使用檔案進行重定向,只需要在命令列中指定用于輸入重定向的資料就可以了,乍看一眼,
這可能有點奇怪,但有些應用會用到這種方式
行內輸入重定向符號是遠小于號( << ),除了這個符號,你必須指定一個文本標記來劃分輸
入資料的開始和結尾,任何字串都可作為文本標記,但在資料的開始和結尾文本標記必須一致,

command << EOF
data
EOF
在命令列上使用行內輸入重定向時, shell 會用 PS2 環境變數中定義的次提示符(參見第 6 章)
來提示輸入資料,下面是它的使用情況,

六、管道

通過前面的學習,我們已經知道了怎樣從檔案重定向輸入,以及重定向輸出到檔案,Shell 還有一種功能,就是可以將兩個或者多個命令(程式或者行程)連接到一起,把一個命令的輸出作為下一個命令的輸入,以這種方式連接的兩個或者多個命令就形成了管道 ‘|’(pipe)

Linux 管道使用豎線|連接多個命令,這被稱為管道符,Linux 管道的具體語法格式如下:

command1 | command2
command1 | command2 [ | commandN... ]

當在兩個命令之間設定管道時,管道符|左邊命令的輸出就變成了右邊命令的輸入,只要第一個命令向標準輸出寫入,而第二個命令是從標準輸入讀取,那么這兩個命令就可以形成一個管道,大部分的 Linux 命令都可以用來形成管道,

核心講解:

這里需要注意,command1 必須有正確輸出,而 command2 必須可以處理 command2 的輸出結果;而且 command2 只能處理 command1 的正確輸出結果,不能處理 command1 的錯誤資訊,

使用示例:

a.作業中常用的就是配合grep 使用,下圖表示的意思是,將cat讀取出來的文本內容發送到 grep 命令;

b.使用管道將 cat 命令的輸出作為 less 命令的輸入,這樣就可以將 cat 命令的輸出每次按照一個螢屏的長度顯示,這對于查看長度大于一個螢屏的檔案內容很有幫助,

c.查看指定程式的行程運行狀態,并將輸出重定向到檔案中,

d.統計系統中當前登錄的用戶數,

七、執行數學運算

對任何編程語言都很重要的特性是運算元字的能力,遺憾的是,對 shell 腳本來說,這
個處理程序會比較麻煩,在 shell 腳本中有兩種途徑來進行數學運算,

7.1 expr 命令

expr 是 evaluate expressions 的縮寫,譯為“運算式求值”,Shell expr 是一個功能強大,并且比較復雜的命令,它除了可以實作整數計算,還可以結合一些選項對字串進行處理,例如計算字串長度、字串比較、字串匹配、字串提取等,

expr 對運算式的格式有幾點特殊的要求:

  • 出現在運算式中的運算子、數字、變數和小括號的左右兩邊至少要有一個空格,否則會報錯,
  • 有些特殊符號必須用反斜杠\進行轉義(屏蔽其特殊含義),比如乘號*和小括號(),如果不用\轉義,那么 Shell 會把它們誤解為正則運算式中的符號(*對應通配符,()對應分組),
  • 使用變數時要加$前綴,
[root@bd15-21-131-161 ~]# expr 2 +3  #錯誤:加號和 3 之前沒有空格
expr: syntax error
[root@bd15-21-131-161 ~]# expr 2 + 3    #這樣才是正確的
5
[root@bd15-21-131-161 ~]# expr 4 * 5     #錯誤:乘號沒有轉義
expr: syntax error
[root@bd15-21-131-161 ~]# expr 4 \* 5  #使用 \ 轉義后才是正確的
20
[root@bd15-21-131-161 ~]# expr ( 2 + 3 ) \* 4  #小括號也需要轉義
-bash: syntax error near unexpected token `2'
[root@bd15-21-131-161 ~]# expr \( 2 + 3 \) \* 4   #使用 \ 轉義后才是正確的
20
[root@bd15-21-131-161 ~]# n=3
[root@bd15-21-131-161 ~]# expr n + 2 
expr: non-numeric argument
[root@bd15-21-131-161 ~]# expr $n + 2    #使用變數時要加 $
5
[root@bd15-21-131-161 ~]#  m=7
[root@bd15-21-131-161 ~]# expr $m \* \( $n + 5 \)
56

以上是直接使用 expr 命令,計算結果會直接輸出,如果你希望將計算結果賦值給變數,那么需要將整個運算式用反引號``(位于 Tab 鍵的上方)包圍起來,請看下面的例子,

實戰詳解:

使用 expr 進行數學計算是多么的麻煩呀,需要注意各種細節,作業中不推薦使用,

7.2 使用方括號[ ]

bash shell 為了保持跟 Bourne shell 的兼容而包含了 expr 命令,但它同樣也提供了一種更簡單的方法來執行數學運算式,在bash 中,在將一個數學運算結果賦給某個變數時,可以用美元符和 方括號($[ operation ] )將數學運算式圍起來.

用方括號執行shell數學運算比用expr命令方便很多,這種技術也適用于shell腳本,

需要額外注意的是bash shell數學運算子只支持整數運算,若要進行任何實際的數學計算,這是一個巨大的限制,如下圖:

八、退出腳本

迄今為止所有的示例腳本中,我們都是突然停下來的,運行完最后一條命令時,腳本就結束
了,其實還有另外一種更優雅的方法可以為腳本劃上一個句號,
shell 中運行的每個命令都使用 退出狀態碼 exit status )告訴 shell 它已經運行完畢,退出狀態
碼是一個 0 255 的整數值,在命令結束運行時由命令傳給 shell ,可以捕獲這個值并在腳本中使用,

8.1 查看退出狀態碼

Linux 提供了一個專門的變數 $? 來保存上個已執行命令的退出狀態碼,對于需要進行檢查的命令,必須在其運行完畢后立刻查看或使用$? 變數,它的值會變成由 shell 所執行的最后一條命令 的退出狀態碼,

如果命令成功結束,那么它退出的狀態碼就是 0,如果是失敗的,那狀態碼就是一個非零的正數值,

無效命令會回傳一個退出狀態碼 127 Linux 錯誤退出狀態碼沒有什么標準可循,但有一些可
用的參考,如下圖:

退出狀態碼126表明用戶沒有執行命令的正確權限,

另一個會碰到的常見錯誤是給某個命令提供了無效引數,

8.2 exit

exit 是一個 Shell 內置命令,用來退出當前 Shell 行程,并回傳一個退出狀態;使用$?可以接收這個退出狀態,

exit 命令可以接受一個整數值作為引數,代表退出狀態,如果不指定,默認狀態值是 0,

一般情況下,退出狀態為 0 表示成功,退出狀態為非 0 表示執行失敗(出錯)了,

exit 退出狀態只能是一個介于 0~255 之間的整數,其中只有 0 表示成功,其它值都表示失敗,

Shell 行程執行出錯時,可以根據退出狀態來判斷具體出現了什么錯誤,比如打開一個檔案時,我們可以指定 1 表示檔案不存在,2 表示檔案沒有讀取權限,3 表示檔案型別不對,

可以看到,"after exit"并沒有輸出,這說明遇到 exit 命令后,test1執行就結束了,

實戰詳解:

注意,exit 表示退出當前 Shell 行程,我們必須在新行程中運行 test1,否則當前 Shell 會話(終端視窗)會被關閉,我們就無法看到輸出結果了,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303087.html

標籤:其他

上一篇:學透CSS-如何組織你的CSS代碼 [學]

下一篇:??《不知道密碼也能登錄Linux系統管理員賬號!!!》??——再也不用擔心忘記Linux系統密碼了, GRUB啟動作業系統教程!(建議收藏)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more