函式:**復用 模組程式設計
語法:
function f_name呼叫:使用函式名f_name()
函式名出現的地方,會被自動替換為函式**;
練習:利用函式改寫此前的服務指令碼:
#!/bin/bash函式的返回值:# prog=`basename $0`
lockfile=/var/lock/subsys/$prog
start()
stop()
case $1 in
"start")
start ;;
"stop")
stop ;;
"restart")
stop
start ;;
*) echo "usage: $prog "
exit 1
esac
函式的執行結果返回值:
函式中使用列印語句:echo, printf
函式體中os命令執行結果的輸出
函式的退出狀態碼:
預設取決於函式體執行的最後乙個命令的退出狀態碼;
自定義退出狀態碼:
return [0-255]
注意:函式體執行時,一旦遇到return語句,函式即返回;
函式可接受引數:
傳遞引數給函式:呼叫函式時,在函式名後給出引數列表即可;例如「testfunc arg1 arg2 arg3」
在函式體中可使用$1, $2,...來呼叫傳遞過來的各引數;
可使用類似指令碼的特殊變數:
$*, $@: 一次性獲取引數列表:
$#: 引數的個數
#!/bin/bash練習:寫乙個指令碼,完成如下功能(使用函式):#showuserinfo()
while true; do
read -p "enter a username: " username
[ "$username" == 'quit' ] && break
showuserinfo $username
[ $? -ne 0 ] && echo "there is something wrong."
done
1、提示使用者輸入乙個可執行命令;
2、獲取這個命令所依賴的所有庫檔案(使用ldd命令);
3、複製命令至/mnt/sysroot/對應的目錄中
解釋:假設,如果複製的是cat命令,其可執行程式的路徑是/bin/cat,那麼就要將/bin/cat複製到/mnt/sysroot/bin/目錄中,如果複製的是useradd命令,而useradd的可執行檔案路徑為/usr/sbin/useradd,那麼就要將其複製到/mnt/sysroot/usr/sbin/目錄中;
4、複製各庫檔案至/mnt/sysroot/對應的目錄中;
#!/bin/bash函式遞迴:#target=/mnt/sysroot
[ -d $target ] || mkdir $target
precmd()
cmdcopy()
libcopy()
main()
main
函式直接或間接呼叫函式自身;
1 1 2 3 5 8 13
階乘:10!
n(n-1)!
n(n-1)(n-2)!
階乘函式:
fact()
bash程式設計之陣列
陣列 資料結構,資料序列,儲存連續多個資料,可以使用索引獲取相關元素 宣告陣列 declare a 宣告索引陣列 declare a 宣告關聯數元素賦值 一次賦值乙個元素 root mm alias 0 read root mm echo 一次賦值多個元素 索引預設從0開始 root mm alia...
bash指令碼程式設計之選項
bash指令碼程式設計之選項 getopts getopts 選項字串 名稱 引數 解析選項引數。getopts 被 shell 過程用於解析可定位的引數作為選項。optstring 字串包含待識別的選項字母 如果乙個字母後面跟 著冒號,則該選項期待乙個引數,而該引數應用空格與選項分開。每次啟動時,...
Linux shell程式設計之bash變數
bash變數 命名規則 必須以字母下劃線開頭,只能由字母下劃線數字組成。長度不能超過255個字元 變數名在有效的範圍內必須唯一 在bash中,變數的預設型別都是字串 一 使用者自定義變數 使用者自定義的變數。區域性變數,只在當前shell有效。格式 變數名 變數值 例如 x 5 等號兩邊不能有空格 ...