1. 程式人生 > >Shell for 迴圈 呼叫函式

Shell for 迴圈 呼叫函式

參考:https://www.cnblogs.com/meitian/p/5662022.html

#!/bin/bash

function a()

(

  ...

  bFlag=b $1

  return $bFlag

}

function b()

{

  ...

  echo "0"

}

#切割

OLD_IFS=$IFS

IFS='|'

dataArr=${data}

IFS=$OLD_IFS

for d in ${dataArr[@]}; do

  a ${d}

  flag=$?

done

如果使用

函式a中使用echo返回值,呼叫形式flag=`a ${d}`,如果${d}包含(或者(,就無法傳參

背景:定義了一個函式,比對本地和線上伺服器叢集數量差別,想要獲取不同叢集的個數。shell和其他語言的函式返回值還是差別挺大的。 定義一個函式 functionname(){      操作內容      echo 輸出內容      return 返回值 #返回值可有可不有 } 獲得函式的返回值 1.函式預設是將標準輸出傳遞出來,不是返回值。 所以如果直接呼叫functionname,實際上是將輸出傳遞回來 例如: a=`functionname` 將函式functionname的標準輸出傳遞給a 2.呼叫函式不需要加(),直接寫函式名就可以 functionname 3.使用$?接收上一程式的返回值狀態,也就是return的值
functionname echo $? 這裡輸出的是函式的返回值 4.函式的返回值一般是0和1,表示成功和失敗,如果一定要返回其他整數,定義一個全域性變數,在函式中改變它 遇到的問題: 將函式返回值賦值時報錯: return: diffrentcluster: numeric argument required 雖然不影響使用,但看著總是不好,查了一下說shell的函式預設是返回0和1來表示是否成功的,如果一定要返回值的話,可以在函式外定義一個全域性變數,然後在函式中賦值這個變數。這樣呼叫函式後,全域性變數就變了,達到同樣的效果 例如:通過函式增加num值 #!/bin/sh num=10 add(){
     echo "test"      ((num++)) } add 輸出的結果是11(變數自增我用num=num+1是無效的,不知道為什麼,必須要用num++) 其他 shell中函式的引數定義也和其他語言不一樣,不是放在括號內。函式中定義時直接在函式體內使用$1、$2....$n來表示引數 呼叫時直接 functionname para1 para2 ..paran來呼叫函式