1. 程式人生 > 其它 >shell指令碼—函式用法

shell指令碼—函式用法

目錄

一、定義

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

二、格式

2.1 格式一

function 函式名 {
命令序列
}

2.2 格式二

函式名() {
命令序列
}

三、函式返回值

return表示退出函式並返回一個退出值,指令碼中可以用 $?變數顯示該值
使用原則:
1)函式一結束就取返回值,因為$?變數只返回執行的最後一條命令的退出狀態碼
2)退出狀態碼必須是0~255,超出時值將為除以256取餘

四、函式傳參

五、函式變數的作用範圍

1.函式在Shell指令碼中僅在當前Shell環境中有效
2.Shell指令碼中變數預設全域性有效
3.將變數限定在函式內部使用local命令



六、遞迴

6.1 階乘

6.1.1 指令碼命令

fact () {
  if [ $1 -eq 1 -o $1 -eq 0  ];then
     echo 1
  elif [ $1 -gt 1 ];then
     local temp=$[$1 - 1]
     local result=$(fact $temp)
     echo $[$1 * $result]
   else
     echo "不存在"
   fi
}
esult=$(fact $1)
echo "$1 的階乘$result"

6.1.2 操作驗證

6.2 遞迴目錄檔案

6.2.1 需求

1.mkdir -p /root/bin/aa/bb/cc/dd
2.touch /root/bin/aa/bb/cc/dd/abc.txt
3.輸出環境變數PATH所包含的所有目錄以及其中的子目錄和所有不可執行檔案

6.2.2 指令碼命令

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 folder in $PATH
do
   echo $folder
   list_files "$folder" "  "
done
IFS=$OLDIFS

6.2.3 操作驗證


七、函式庫

7.1 建立函式庫(一個指令碼)

7.2 呼叫函式庫(另一個指令碼)

7.2 操作驗證