希望各位不要白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表示假。$@的意思是所有傳入的參數 還有一個重要的點就是 $#這個意思是傳入所有參數的個數,再囉嗦一下如果還是不懂請參照我的另一篇博文:位置參數和特殊變量