function name { commands}
在行中指定函数名就行了
## 创建函数,注意函数名和大括号中间有空格,不然会报错
function func1 {
echo "this is an example of funciton"
}
## 使用函数
func1
## 函数默认退出状态码,返回函数执行的最后一条命令
func2() {
echo "trying to display a non-existent file"
ls -l badfile
}
func2
echo "the exit status is: $?" ##$?为函数默认推出状态码
## 使用return命令,需要函数一结束就取返回值,并且返回值必须是0-255
function db1 {
read -p "Enter a value:" value
echo "doubling the value"
return $[ $value * 2 ]
}
db1
echo "the new value is : $?"
## 使用函数输出
function db2 {
read -p "Enter a value: " value1
echo $[ $value1 * 2 ]
}
result=$(db2)
echo "the new result is $result"
## 在函数中使用变量
# 向函数传递参数
function addem {
if [ $# -eq 0 ] || [ $# -gt 2 ]
then
echo -1
elif [ $# -eq 1 ]
then
echo $[ $1 + $1 ]
else
echo $[ $1 + $2 ]
fi
}
echo -n "Adding 10 and 15 :"
value=$(addem 10 15) #在脚本内调用函数的方式
echo $value
# 将脚本参数传递给函数 ./test17_3.sh 12 14
function multiply {
echo $[ $1 * $2 ]
}
if [ $# -eq 2 ]
then
value=$(multiply $1 $2) ##手动将脚本变量传递给函数
echo "$1 multiply $2 is $value"
fi
默认情况下,在脚本中定义的任何变量都是全局变量,即使在函数中定义的变量也是全局变量
在变量声明前加上local关键字即可
local temp=5
## 函数变量和数组
function testit {
echo "the parameter are : $@"
thisarray=($(echo "$@"))
echo "The received array is ${thisarray[*]}"
}
myarray=(1 2 3 4 5)
echo "the original array is : ${myarray[*]}"
testit ${myarray[*]}
用echo语句按照正确顺序输出单个数组值。
## 从函数返回数组
function arraydblr {
local origarray
local newarray
local elements
local i
origarray=($(echo "$@"))
newarray=($(echo "$@"))
elements=$[ $# - 1 ]
for(( i = 0 ; i <= elements ; i++)){
newarray[$i]=$[ ${origarray[$i]} * 2 ]
}
echo ${newarray[*]}
}
myarray=(1 2 3 4 5)
arg1=$(echo ${myarray[*]})
result=($(arraydblr $arg1))
echo "the new array is : ${result[*]}"
## 函数递归
function factorial {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[ $1 -1 ]
local result=$(factorial $temp)
echo $[ $result * $1 ]
fi
}
read -p "Enter value :" value1
result=$(factorial $value1)
echo "The factorial of $value1 is : $result"
使用函数库的关键在于source命令,它有一个快捷的别名,称为点操作符,如果使用库文件。
## 库文件 myfunc
root@kali:~/Desktop/Scripts# cat myfuncs
function addem {
echo $[ $1 + $2 ]
}
function mulem {
echo $[ $1 * $2 ]
}
function divem {
if [ $2 -ne 0 ]
then
echo $[ $1 / $2 ]
else
echo -1
fi
}
source ./myfuncs ##引入库文件,也可以是 . /root/Desktop/Scripts/myfuncs
value1=10
value2=5
result1=$(addem $value1 $value2)
result2=$(mulem $value1 $value2)
result3=$(divem $value1 $value2)
echo "$value1 + $value2 = $result1"
echo "$value1 * $value2 = $result2"
echo "$value1 / $value2 = $result3"
1.单行方式:需要在每个命令后面加上分号。
2.多行方式,不需要分号,只需要按下回车就行。
1.直接定义,写在$home/.bashrc文件中。
2.读取函数文件,使用source命令将库文件中的函数添加到.bashrc脚本中。
链接: https://blog.csdn.net/ch122633/article/details/77176237
链接 : https://www.cnblogs.com/hfutwyy/p/3415577.html
链接: https://blog.csdn.net/u010819416/article/details/53942380?locationNum=1&fps=1
链接: https://blog.csdn.net/xiatian6032/article/details/26982031?utm_source=blogxgwz2