天天看點

Shell 程式設計進階(三)信号捕捉trap函數數組練習

文法格式:

自定義程序收到系統發出的指定信号後,将執行觸發指令,而不會執行原操作。

示例

運作結果

函數function是由若幹條shell指令組成的語句塊,實作代碼重用和子產品化程式設計

 它與shell程式形式上是相似的,不同的是它不是一個單獨的程序,不能獨立運作,而是shell程式的一部分

 函數和shell程式比較相似,差別在于:

Shell程式在子Shell中運作

而Shell函數在目前Shell中運作。是以在目前Shell中,函數可以對shell中變量進行修改

函數由兩部分組成:函數名和函數體

 可在互動式環境下定義函數

 可将函數放在腳本檔案中作為它的一部分

 可放在隻包含函數的單獨檔案中

 調用:函數隻有被調用才會執行調用:函數名出現的地方,

會被自動替換為函數代碼

 函數的生命周期:被調用時建立,傳回時終止

 函數在使用前必須定義,是以應将函數定義放在腳本開始部分,直至shell首次發現它後才能使用

 調用函數僅使用其函數名即可

可以将經常使用的函數存入函數檔案,然後将函數檔案載入shell

 檔案名可任意選取,但最好與相關任務有某種聯系。例如:functions.net

 一旦函數檔案載入shell,就可以在指令行或腳本中調用函數。可以使用set指令檢視所有定義的函數,

其輸出清單包括已經載入shell的所有函數

 若要改動函數,首先用unset指令從shell中删除函數。改動完畢後,再重新載入此檔案

傳遞參數給函數:調用函數時,在函數名後面以空白分隔給定參數清單即可;例如“ testfunc arg1 arg2 ...”

在函數體中當中,可使用$1, $2, ...調用這些參數;還可以使用$@, $*, $#等特殊變量

函數變量作用域示例

函數直接或間接調用自身

注意遞歸層數

執行個體:

實作系統中如下的功能,列印帶顔色的服務提示

Shell 程式設計進階(三)信号捕捉trap函數數組練習

1、編寫函數,實作OS的版本判斷

2、編寫函數,實作取出目前系統網卡的IP位址

3、編寫函數,實作列印綠色OK和紅色FAILED

<html> #f_green <font color="#66CD00">OK</font> #f_red <font color="#FF0000">FAILED</font> </html>

4、編寫函數,實作判斷是否無位置參數,如無參數,提示錯誤

5、編寫服務腳本/root/bin/testsrv.sh,完成如下要求:

(1) 腳本可接受參數:start, stop, restart, status

(2) 如果參數非此四者之一,提示使用格式後報錯退出

(3) 如是start:則建立/var/lock/subsys/SCRIPT_NAME,

并顯示“服務啟動成功”。考慮:如果事先已經啟動過一次,該如何處理?

(4) 如是stop:則删除/var/lock/subsys/SCRIPT_NAME, 并顯示“服務停止完成”

考慮:如果事先已然停止過了,該如何處理?

(5) 如是restart,則先stop, 再start>考慮:如果本來沒有start,如何處理?

(6) 如是status, 則如果/var/lock/subsys/SCRIPT_NAME檔案存在,則顯示“ 服務運作中...”

如果/var/lock/subsys/SCRIPT_NAME檔案不存在,則顯示“ 服務已停止...”

其中:SCRIPT_NAME為目前腳本名

(7)在所有模式下禁止啟動該服務,可用chkconfig 和 service指令管理

6、編寫腳本/root/bin/copycmd.sh

(1) 提示使用者輸入一個可執行指令名稱

(2) 擷取此指令所依賴到的所有庫檔案清單

(3) 複制指令至某目标目錄(例如/mnt/sysroot)下的對應路徑下

如:/bin/bash ==> /mnt/sysroot/bin/bash

/usr/bin/passwd ==> /mnt/sysroot/usr/bin/passwd

(4) 複制此指令依賴到的所有庫檔案至目标目錄下的對應路徑下:

如:/lib64/ld-linux-x86-64.so.2 ==>/mnt/sysroot/lib64/ld-linux-x86-64.so.2

(5)每次複制完成一個指令後,不要退出,而是提示使用者鍵入新的要複制的指令,并重複完成上述功能;直到使用者輸入quit退出

Shell 程式設計進階(三)信号捕捉trap函數數組練習

7、編寫函數實作兩個數字做為參數,傳回最大值

聲明數組:

數組元素的指派

使用數組

删除數組和删除數組上某個元素

數組資料處理

1、生成10個随機數儲存于數組中,并找出其最大值和最小值

2、編寫腳本,定義一個數組,數組中的元素是/var/log目錄下所有以.log結尾的檔案;統計出其下标為偶數的檔案中的行數之和

方法一:

方法二:

3、擷取指定元素的下标值

4、輸入若幹個數值存入數組中,采用冒泡算法進行升序或降序排序

5、将下圖所示,實作轉置矩陣matrix.sh

學習後果然讓自己知道如何shell程式設計,勞動成果。轉載請保留連結。

本文轉自 ljpwinxp 51CTO部落格,原文連結:http://blog.51cto.com/191226139/2057595

繼續閱讀