Linux--腳本之函數用法


函數介紹

函數function是由若干條shell命令組成的語句塊,實現代碼重用和模塊化編程。

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

函數和shell程序比較相似,區別在於:

Shell程序在子Shell中運行,而Shell函數在當前Shell中運行。

因此在當前Shell中,函數可以對shell中變量進行修改。

 

定義函數

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

語法一: function f_name { ...函數體... }

語法二: function f_name () { ...函數體... }

語法三: f_name (){ ...函數體... }   (此語法最為常用)

 

函數也分為本地函數和環境函數。

set 查看本地變量及本地函數

1 [root@mmmm(mei) bin]# set
2 BASH=/bin/bash
3 BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
4 BASH_ALIASES=()
5 BASH_ARGC=()
6 BASH_ARGV=()
7 BASH_CMDS=()
8 BASH_LINENO=()

 


unset 變量名或函數名 取消變量或函數的定義
本地函數

1 [root@mmmm(mei) bin]# test () {  echo hello world; return 2; }
2 [root@mmmm(mei) bin]# test
3 hello world
4 [root@mmmm(mei) bin]# unset test
5 [root@mmmm(mei) bin]# test
6 [root@mmmm(mei) bin]# 

環境函數

declare -xf mage或export -f mage
查看環環境函數
declare -xf 或export -f

 1 [root@mmmm(mei) bin]# declare -xf test
 2 [root@mmmm(mei) bin]# declare -xf
 3 [root@mmmm(mei) bin]# test () {  echo hello world; return 2; }
 4 [root@mmmm(mei) bin]# declare -xf test
 5 [root@mmmm(mei) bin]# declare -xf
 6 test () 
 7 { 
 8     echo hello world;
 9     return 2
10 }
11 declare -fx test

 

函數使用


函數的定義和使用:

    (1)可在交互式環境下定義函數

1 [root@mmmm(mei) ~]# test () {
2 > echo hello world
3 > }
4 [root@mmmm(mei) ~]# test
5 hello world

 

(2)可將函數放在腳本文件中作為它的一部分

1 1 #!/bin/bash
2 2 test () {
3 3         echo hello world
4 4 }
5 5 test

 

在此需要注意一點:

        當我們需要使用函數時,直接使用函數名即可,函數名會被自動替換為函數代碼 。

        但建議將函數部分的代碼寫在調用函數前面,使得在解釋腳本時不報錯。

(3)可放在只包含函數的單獨文件中 ,可以在其他腳本中調用該文件的函數

 

函數是在被調用時創建,返回時終止。那么函數的返回值是什么呢?

函數的返回值也分為兩種情況:
1.函數的執行結果返回值:

(1) 使用echo等命令進行輸出

(2) 函數體中調用命令的輸出結果

2.函數的退出狀態碼:

(1) 默認取決於函數中執行的最后一條命令的退出狀態碼

1 [root@mmmm(mei) bin]# test () {
2 > echo hello world
3 > }
4 [root@mmmm(mei) bin]# test
5 hello world
6 [root@mmmm(mei) bin]# echo $?
7 0

 

 

(2) 自定義退出狀態碼,

            其格式為: return  從函數中返回,用最后狀態命令決定返回值

            return 0  無錯誤返回。

                   return 1-255  有錯誤返回     

1 [root@mmmm(mei) bin]# test () { 
2 > echo hello world
3 > return 2
4 > }
5 [root@mmmm(mei) bin]# test
6 hello world
7 [root@mmmm(mei) bin]# echo $?
8 2

 

 

接下來我們舉一個簡單的小例子來介紹一些函數的用法

declare -i num=100 使num的賦值只在當前函數中有效,等於同local num=100

 1 1 #!/bin/bash
 2   2 test() {
 3   3         declare -i num=$1
 4   4         if [ $1 -le 1 ]; then
 5   5                 echo -e "hello\n"
 6   6         else
 7   7                 echo no
 8   8                 echo $(test $[$num-1])
 9   9 
10 10         fi
11 11         echo $num
12 12 }
13 13 test $1
14 14 echo $num
15 [root@mmmm(mei) bin]# testhanshu.sh 2
16 no
17 hello 1
18 2

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM