Shell 函數

1、Shell函數概述

1. Shell函數的概念

將命令序列按格式寫在一塊兒,可方便重複使用命令序列javascript

2. Shell函數定義

方式一:java

function 函數名 { 命令序列 } 

方式二:程序員

函數名() {
  命令序列
}

3. 調用函數的方法

函數名 [參數1] [參數2]shell

4. 函數返回值

return表示退出函數並返回一個退出值,腳本中能夠用$?變量顯示該值
使用原則:
(1)函數一結束就取返回值,由於$?變量只返回執行的最後一條命令的退出狀態碼;
(2)退出狀態碼必須是0~255,超出時返回值將爲除以256後的取餘數。bash

5. 函數的做用範圍

函數在Shell腳本中僅在當前Shell環境中有效
Shell腳本中變量默認全局有效
將變量限定在函數內部使用local命令函數

#!/bin/bash test() { local i #i爲內部變量 i=8 #內部變量i爲8 echo #echo內部變量i } i=9 #外部變量i爲9 test echo $i #echo外部變量i 
[root@localhost ~]# ./test 8 #內部變量i先被echo 9 #外部變量i後被echo 

6. 函數的參數

(1)參數的用法

函數名稱 參數1 參數2 參數3……ui

(2)參數的表示方法

$1 $2 $3 …… ${10} ${11} ……es5

#!/bin/bash sum1() { sum=$[$1+$2] echo $sum } sum1 $1 $2 
[root@localhost ~]# ./jiafa.sh 1 2 3 

2、遞歸函數

1. 階乘

調用本身自己的函數spa

#!/bin/bash fact() { if [ $1 -eq 1 ];then echo 1 else local temp=$[$1 - 1] local result=$(fact $temp) echo $[$1 * $result] fi } read -p "請輸入:" n result=$(fact $n) echo $result 
[root@localhost ~]# ./fact.sh 請輸入一個階乘的數字:5 120 [root@localhost ~]# ./fact.sh 請輸入一個階乘的數字:10 3628800 

2. 遞歸目錄

#!/bin/bash list_files() { for i in $(ls $1) do if [ -d "$1/$i" ];then echo "$2$i/" list_files "$1/$i" " $2" else if [ ! -x $1/$i ];then echo "$2$i" fi fi done } ################main############### OLDIFS=$IFS IFS=$IFS':' for floder in $PATH do echo "$floder/" list_files "$floder" " " done IFS=$OLDIFS 
[root@localhost ~]# ./jiansuo.sh /usr/local/sbin/ /usr/local/bin/ /usr/sbin/ /usr/bin/ /root/bin/ aa/ bb/ cc/ dd/ abc.txt 

3、建立函數庫

1. 函數庫的定義

函數庫是由系統創建的具備必定功能的函數的集合。庫中存放函數的名稱和對應的目標代碼,以及鏈接過程當中所需的重定位信息。用戶也能夠根據本身的須要創建本身的用戶函數庫。code

2. 函數庫的做用

C語言庫函數是把自定義函數放到庫裏,是別人把一些經常使用到的函數編完放到一個文件裏,供程序員使用。程序員用的時候把它所在的文件名用#include<>加到裏面就能夠了(尖括號內填寫文件名),例如#include<math.h>。

3. 建立函數庫

#!/bin/bash fact() { if [ $1 -eq 1 ];then echo 1 else local temp=$[$1-1] local result=$(fact $temp) echo $[$1 * $result] fi } jiafa() { echo $[$1 + $2] } jianfa() { echo $[$1 - $2] } chengfa() { echo $[$1 * $2] } chufa() { if [ $2 -ne 0 ];then echo $[$1 / $2] else echo "被除數不能爲0!" fi } 

4. 調用函數庫

#!/bin/bash . suanfa.sh v1=$1 v2=$2 res1=$(jiafa $v1 $v2) res2=$(jianfa $v1 $v2) res3=$(chengfa $v1 $v2) res4=$(chufa $v1 $v2) res5=$(fact $v1) echo "加法的結果爲 $res1" echo "減法的結果爲 $res2" echo "乘法的結果爲 $res3" echo "除法的結果爲 $res4" echo "$1 階乘的結果爲 $res5" 
[root@localhost ~]# ./jisuan.sh 10 5 加法的結果爲 15 減法的結果爲 5 乘法的結果爲 50 除法的結果爲 2 10 階乘的結果爲 3628800 [root@localhost ~]# ./jisuan.sh 5 0 加法的結果爲 5 減法的結果爲 5 乘法的結果爲 0 除法的結果爲 被除數不能爲0! 5 階乘的結果爲 120
相關文章
相關標籤/搜索