文法格式:
自定義程序收到系統發出的指定信号後,将執行觸發指令,而不會執行原操作。
示例
運作結果
函數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, ...調用這些參數;還可以使用$@, $*, $#等特殊變量
函數變量作用域示例
函數直接或間接調用自身
注意遞歸層數
執行個體:
實作系統中如下的功能,列印帶顔色的服務提示
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退出
7、編寫函數實作兩個數字做為參數,傳回最大值
聲明數組:
數組元素的指派
使用數組
删除數組和删除數組上某個元素
數組資料處理
1、生成10個随機數儲存于數組中,并找出其最大值和最小值
2、編寫腳本,定義一個數組,數組中的元素是/var/log目錄下所有以.log結尾的檔案;統計出其下标為偶數的檔案中的行數之和
方法一:
方法二:
3、擷取指定元素的下标值
4、輸入若幹個數值存入數組中,采用冒泡算法進行升序或降序排序
5、将下圖所示,實作轉置矩陣matrix.sh
學習後果然讓自己知道如何shell程式設計,勞動成果。轉載請保留連結。
本文轉自 ljpwinxp 51CTO部落格,原文連結:http://blog.51cto.com/191226139/2057595