bash程式設計之 函式

2021-08-03 19:12:12 字數 1726 閱讀 7069

函式:**復用 模組程式設計

語法:

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 等號兩邊不能有空格 ...