【shell】shell函數的應用與注意事項

希望各位不要白piao,點個贊或者刷個評論再走,還有【禁止轉載】我個人覺得寫的比較細,有基礎的還是看一下黑體字的部分,因爲我覺得還是很容易出錯。話不多說講什麼我會先列出來,如果會了可以忽略本文章,省下時間去學習別的知識~

如果你有一定基礎還是要看下黑體字的!!
如果你有一定基礎還是要看下黑體字的!!
如果你有一定基礎還是要看下黑體字的!!

這篇文章主要講函數,如果有其他的疑惑,請參考我的其他文章,根據自己的需求去獲取自己想要的答案(所有的文章開頭和題目都會註明這篇文章寫了什麼)!

函數

和C語言、java類似,Shell中也有函數的概念,但是函數定義中沒有返回值也沒有參數列表。例如:

    #! /bin/sh
foo(){ 
	echo "Function foo is called";
	}
	
echo "-=start=-"
foo
echo "-=end=-"

注意函數體的左花括號’{‘和後面的命令之間必須有空格或換行,如果將最後一條命令和右花括號’}'寫在同一行,命令末尾必須有;號。
在定義foo()函數時並不執行函數體中的命令,就像定義變量一樣,只是給foo這個名字一個定義,到後面調用foo函數的時候(注意Shell中的函數調用不寫括號)才執行函數體中的命令。Shell腳本中的函數必須先定義後調用,一般把函數定義都寫在腳本的前面,把函數調用和其它命令寫在腳本的最後(類似C語言中的main函數,這纔是整個腳本實際開始執行命令的地方)。
Shell函數沒有參數列表並不表示不能傳參數,事實上,函數就像是迷你腳本,調用函數時可以傳任意個參數,在函數內同樣是用$0、$1、$2等變量來提取參數,此處可以參考我的另一篇博文:位置參數和特殊變量
函數中的位置參數相當於函數的局部變量,改變這些變量並不會影響函數外面的$0、$1、$2等變量。函數中可以用return命令返回,如果return後面跟一個數字則表示函數的Exit Status
下面這個腳本可以一次創建多個目錄,各目錄名通過命令行參數傳入,腳本逐個測試各目錄是否存在,如果目錄不存在,首先打印信息然後試着創建該目錄。

    #! /bin/sh
is_directory()
    {
      DIR_NAME=$1
      if [ ! -d $DIR_NAME ]; then # 判斷是不是directory
        return 1
      else
        return 0
      fi
    }
for DIR in "$@"; do #遍歷位置參數,如果看不懂砍我上面的博文連接
      if is_directory "$DIR"
      then :
      else
        echo "$DIR doesn't exist. Creating it now..."
        mkdir $DIR > /dev/null 2>&1 #創建文件夾,重定向錯誤輸出
        if [ $? -ne 0 ]; then # 判斷文件夾是否創建成功
          echo "Cannot create directory $DIR"
          exit 1
        fi
      fi
    done

注意:
is_directory()返回0表示真返回1表示假。$@的意思是所有傳入的參數 還有一個重要的點就是 $#這個意思是傳入所有參數的個數,再囉嗦一下如果還是不懂請參照我的另一篇博文:位置參數和特殊變量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章