Shell Script函數

函數

在大多數編程語言中,都會存在函數的概念,如C語言中的printf()。在編程過程中,將一段會重複使用且爲完成特定功能的語句寫在函數中,可以減少代碼的長度提高可讀性。在ShellScript中,除了使用函數外有另一種選擇,即將一個較長的腳本分爲多個小腳本文件,但這種方法的效率會比使用函數低,在實際編寫中可根據需要選擇使用函數或者分文件。
在ShellScript中函數的定義與使用的方法也非常簡單。定義一個函數只需要寫出函數名,再跟上一對圓括號和花括號,並將具體的語句寫在花括號中;使用函數時只需寫出函數名即可調用該函數。

# 函數的定義
function_name() {
  statements
}

# 使用函數
function_name

下面使用一個簡單的例子演示函數的使用。

#!/bin/sh

foo() {
  echo "Function foo is executing"
}

echo "script starting"
foo
echo "script ended"

程序先是定義(不執行)了函數foo,然後開始執行下面的代碼。執行完echo "script starting後執行foo將調用函數foo,於是程序將執行函數foo中的語句。執行該程序,將得到以下結果。

script starting
Function foo is executing
script ended

函數參數與返回值

在函數的使用中經常需要傳遞參數和返回值。在定義函數時,無需像其它語言一樣預先定義函數的個數及名稱,而是在函數中直接使用參數變量即可,參數變量參見Shell Script介紹及變量使用。在調用函數時,若需要傳遞參數,只需在函數名後加上參數,如function_name arg1 arg2 ...。函數的值返回方法與其它大部分語言類似,即return return_value。下面將使用一個小程序演示函數參數及返回值的使用。

#!/bin/sh

yes_or_no() {
  echo "Is your name $* ?"
  while true
  do
    echo -n "Enter yes or no: "
    read x
    case "$x" in
      [yY] | [yY][eE][sS] )
        return 0
        ;;
      [nN] | [nN][oO] ) 
        return 1
        ;;
      * )
        echo "answer yes or no"
        ;;
    esac
  done
}

if yes_or_no "xxx"
then
  echo "Hi xxx, nice name"
else
  echo "Never mind"
fi

exit 0

下面將執行兩次程序,分別輸入yes與no,結果如下。

# first time
Is your name xxx ?
Enter yes or no: yes
Hi xxx, nice name

# second time
Is your name xxx ?
Enter yes or no: no
Never mind
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章