第10章 函式

2021-07-27 02:36:16 字數 2287 閱讀 3109

定義函式的格式:

name ()

command-list;

呼叫函式的格式:

name  #省略括號

檢視到所宣告的函式定義:

declare –f name

取消定義的函式,可以使用unset命令:

unset name

案例:#!/bin/bash

#定義函式printmsg用來輸出資訊到終端螢幕,該函式至少需要兩個引數

printmsg()

#定義函式logmsg用來記錄資訊到log檔案,該函式至少可以接收乙個引數

logmsg()

#通過兩個引數呼叫函式printmsg,如果函式以非零值退出,才會呼叫logmsg函式

#由於指定了足夠的引數,printmsg函式會返回成功值0,所以logmsg不會被呼叫

printmsg "from printmsg()" "it works..." "aabbcc" && logmsg "from logmsg()" "it works...."

注意:1 如果定義的函式名與bash內建的命令相同,則這個函式會覆蓋內建命令。

本地變數:在函式內部所定義的變數只能在函式內部使用。變數前加了

local。

全域性變數:可以在指令碼內任何地方使用。

解讀:為了程式不混亂,盡量使用本地變數,命名更具有描述性。

遞迴呼叫:函式呼叫本身。

案例:#!/bin/bash

#定義計算階乘的函式recursive,它接收乙個引數

recursive()

#提示使用者輸入整數值做階乘運算,數值小於20是為了防止計算結果超出變數儲存範圍

echo 

echo -n " enter a number (<20) to do n! operation (type "quit" to exit): "

read input

#當使用者輸入字串quit時,until迴圈結束,指令碼退出

until [ "$input" = "quit" ]

do #對輸入資料進行匹配

case $input in

#合法的輸入可以是1到9的個位數,或者是10到19的兩位數,還可以是20

[1-9]|[1][0-9]|20)

#呼叫遞迴函式並儲存計算結果

outcome=`recursive "$input"`

echo "  after computing,$input!=$outcome"

echo

;; #對所有不合法的輸入進行匹配

*)       echo

echo " not a valid number,enter again!"

;; esac

#為下一次階乘運算讀取使用者輸入的資料

echo -n " enter a number(<20) to do n!operation (type "quit" to exit):"

read input

done

echo 

echo " bye."

exit 0

函式庫:指的是將通用的函式先定義好乙個指令碼,方便其他指令碼呼叫。

注意:1 不要以#!/bin/bash開始庫檔案,同時給庫檔案新增可執行許可權

2 要在指令碼檔案的一開始執行庫檔案

案例:庫檔案:   

#!/bin/echo       warning:this is a library which should be sourced!

#上面一行的作用是防止庫檔案被意外執行

#定義函式test_platform用來測試當前的作業系統

test_platform() in

"freebsd" in

platform="freebsd"

;;"sunos"

platform="sunos"

;;"linux"

platform="linux"

;;esac

return 0

}指令碼:

#!/bin/bash

#首先在指令碼程式中包含進庫檔案library.lib從而可以呼叫其中定義的函式

source ./library.lib 

#呼叫函式庫中的函式test_platform

test_platform

#輸出函式test_platform中定義的全域性變數platform

echo

echo "our running platform is $platform"

exit 0

第10章 深入函式

1 普通函式的過載 過載的是引數的型別 成員函式的過載 過載的是引數的型別 2 普通函式的預設引數 預設引數 以及成員函式的預設引數 預設引數 過載的是引數的數值 3 過載建構函式 4 成員變數初始化 在函式體中進行賦值或者在建構函式頭進行初始化 常量和引用只能初始化不能進行賦值 5 成員變數初始化...

第10章第8題

mylist.h ifndef mylist h define mylist h include const int len 10 class mylist endif void show double mid 這個函式用於簡單的顯示乙個double mylist.cxx include mylis...

第10章 模糊查詢和聚合函式

use myschool 萬用字元 匹配0 n個任意字元 匹配單個字元 匹配區間內的值 如 13 不匹配區間內的值 模糊查詢 查詢學生表中性 張 的學生記錄 select from student where studentname like 張 select from student where ...