函數(shù)的調(diào)用方式有多種梯醒,可以直接在 Shell 命令行調(diào)用函數(shù)垫竞,或是在腳本內(nèi)部調(diào)用函數(shù)畜普,或是從其他函數(shù)文件中調(diào)用函數(shù),還可以遞歸地調(diào)用函數(shù)护侮。
在腳本中調(diào)用函數(shù)
在腳本中調(diào)用函數(shù)的實(shí)例:
#! /bin/bash
function yesterday() {
date --date='1 day ago'
}
yesterday
上面腳本的運(yùn)行效果:
2017041505
從函數(shù)文件中調(diào)用函數(shù)
1.我們可以把所有的函數(shù)存儲在一個函數(shù)文件中敌完;
2.我們可以把所有的函數(shù)加載到當(dāng)前腳本或是命令行。
加載函數(shù)文件中的所有函數(shù)的語法如下:
/path/to/functions.sh
現(xiàn)在有如下腳本 functionsTest.sh :
#! /bin/bash
declare -r TRUE=0
declare -r FALSE=1
declare -r PASSWD_FILE=/etc/passwd
function to_lower() {
local str="$@"
local output
output=$(tr '[A-Z]' '[a-z]'<<<"${str}")
echo $output
}
function is_root() {
[ $(id -u) -eq 0 ] && return $TRUE || return $FALSE
}
function is_user_exits() {
local u="$1"
grep -q "^${U}" $PASSWD_FILE && return $TRUE || return $FALSE
}
從函數(shù)文件中調(diào)用上述腳本的測試腳本如下:
#! /bin/bash
. /home/toby/functionsTest.sh
var1="The DHJAGD sdja aidWyMDAHDGAswdGDAHWk ashjdaksSd WYGY."
is_root && echo "You are logged in as root." || echo "You are not logged in as root."
is_user_exits "toby" && echo "Account found." || echo "Account not found."
echo -e "*** Orignal quote: \n${var1}"
echo -e "*** Lowercase version: \n$(to_lower ${var1})"
上述腳本的運(yùn)行結(jié)果:
2017041506
遞歸函數(shù)調(diào)用
遞歸函數(shù)是重復(fù)調(diào)用其自身的函數(shù)羊初,并且沒有遞歸調(diào)用次數(shù)的限制滨溉。
下面是一個計(jì)算給定命令行參數(shù)的階乘的實(shí)例:
#! /bin/bash
function factorial() {
local i=$1
local f
declare -i i
declare -i f
[ $i -le 2 ] && echo $i || { f=$(( i - 1 )); f=$(factorial $f); f=$(( f * i )); echo $f; }
}
[ $# -eq 0 ] && { echo "Usage: $0 number"; exit 1; }
factorial $1
運(yùn)行效果如下:
2017041507
本文參考自 《Linux Shell命令行及腳本編程實(shí)例詳解 》