乙個會宕機的shell指令碼詳解

2021-05-22 14:22:01 字數 1277 閱讀 2161

這是一 段遞迴的bash指令碼,沒事別亂執行,它會不停的fork出進 程直到pid的上限, 然後你就別想執行新的程序了。右側配圖為**。

說明清單.bash 中的 fork 炸彈的解釋(前面的是行號,附註說明而已)

1 .() 2

5 ;6 .

第 1 行說明下面要定義乙個函式,函式名為小數點,沒有可選引數。

第 2 行表示函式體開始。

第 3 行是函式體真正要做的事情,首先它遞迴呼叫本函式,然後利用管道呼叫乙個新程序(它要做的事情也是遞迴呼叫本函式),並將其放到後台執行。

第 4 行表示函式體結束。

第 5 行並不會執行什麼操作,在命令列中用來分隔兩個命令用。從總體來看,它表明這段程式包含兩個部分,首先定義了乙個函式,然後呼叫這個函式。

第 6 行表示呼叫本函式。

對於函式名,大家可能會有所疑惑,小數點也能做函式名使用嗎?畢竟小數點是 shell 的乙個內嵌命令,用來在當前 shell 環境中讀取指定檔案,並執行其中的命令。實際上的確可以,這取決於 bash 對命令的解釋順序。預設情況下,bash 處於非 posix 模式,此時對命令的解釋順序如下:

關鍵字,例如 if、for 等。

別名。別名不能與關鍵字相同,但是可以為關鍵字定義別名,例如 end=fi。

特殊內嵌命令,例如 break、continue 等。posix 定義的特殊內嵌命令包括:.(小數點)、:(冒號)、break、continue、eval、exec、exit、export、readonly、 return、set、shift、times、trap 和 unset。bash 又增加了乙個特殊的內嵌命令 source。

函式。如果處於非 posix 模式,bash 會優先匹配函式,然後再匹配內嵌命令。

非特殊內嵌命令,例如 cd、test 等。

指令碼和可執行程式。在 path 環境變數指定的目錄中進行搜尋,返回第乙個匹配項。

由於預設情況下,bash 處於非 posix 模式,因此 fork 炸彈中的小數點會優先當成乙個函式進行匹配。(實際上,jaromil 最初的設計並沒有使用小數點,而是使用的冒號,也能起到完全相同的效果。)要使用 posix 模式來執行 bash 指令碼,可以使用以下三種方法:

使用 –posix 選項啟動 bash。

在執行 bash 之後,執行 set -o posix 命令。

使用 /bin/sh 。

最後一種方法比較有趣,儘管 sh 在大部分系統上是乙個指向 bash 的符號鏈結,但是它所啟用的卻是 posix 模式,所有的行為都完全遵守 posix 規範。

注意:此**執行會當機,沒事別玩。

乙個shell指令碼

之前學過shell指令碼,但是工作中一直沒有用到,今天由於要搞乙個定時任務,為了防止重複啟動php指令碼,就需要寫乙個shell,下面是指令碼內容 bin bash 宣告要使用哪個shell 下面是備註檔案 這可是乙個好習慣奧 date 2012 7 18 version 1.0 設定相關變數 fi...

乙個簡單的Shell指令碼

最近新學linux的shell程式設計。試著寫了乙個遍歷資源目錄的子目錄,每個資源子目錄中拷貝10個檔案到目標目標的小指令碼。沒有什麼技術含量,只是防止自己忘記。bin sh srcroot vsu data2 datasource npm fiveminute srcpath null myroo...

shell指令碼練習 每天乙個shell指令碼 7

我的部落格都是依照自己淺薄的現有知識去寫的,好多時候寫完了部落格,去查詢答案,會發現很多更剪短更效率更好的答案。寫部落格是激勵我自己能堅持下去,讓我的頭腦不去懈怠,望共勉。題目 write a script five dirs.sh that does these tasks make a dire...