shell函数应用

观书散遗帙,探古穷至妙。这篇文章主要讲述shell函数应用相关的知识,希望能为你提供帮助。
shell函数概述什么叫shell函数?
将命令序列按格式写在一起
可方便重复使用命令序列
Shell函数格式:

格式【1】:
function函数名
命令序列


格式【2】
函数名()
命令序列


示例:
#!/bin/bash
#定义函数
function hello
echo "hello world"

######### main ########
#调用函数
hello

#定义函数user
user()
useradd $name
echo 123456 | passwd --stdin $name

#----main----
read -p "请输入用户名" name
#调用函数
user





函数返回值
    return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值
使用原则:
1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码;
2、退出状态码必须是0~255,超出时值将为除以256取余。




示例:方法一
function num
read -p "请输入: " sum
return $[$sum * 2]

-----main-----
num
echo $?




方法二:

num()
read -p "请输入:” sum
echo $[$sum * 2]


result=num

echo $result



函数传参:
sum1()
sum=$[$1 + $2]
echo $sum

-----main-----
read -p "输入第一个参数:" first
read -p "输入第二个参数:" second
sum1 $first $second

sum1()
sum=$[$1 + $2]
echo $sum

result=$(sum1 $1 $4 $2)
echo $result
输出结果为:$1+$4








函数变量的作用范围
函数在Shell脚本中仅在当前Shell环境中有效
Shell脚本中变量默认全局有效
将变量限定在函数内部使用 local 命令
示例一:
myfun()
local i
i=7
echo $i

i=8
myfun
echo $i



递归
函数调用自己本身的函数

示例一: 阶乘# 5 * $result(4*$result(3*$result(2*$result(1))))
fact()
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi

-----main-----
read -p "请输入:" n
result=$(fact $n)
echo $result



示例二:递归目录
function list_files
for f in `ls $1`#遍历指定目录内容
do
if [ -d "$1/$f" ]#如果是目录则输出目录名称并继续调用函数判断子目录,且输出时缩进;
then
echo "$2$f"
list_files "$1/$f" " $2"
else#如果是文件则直接缩进输出文件名称
echo "$2$f"
fi
done

-----main-----
#第一个位置变量用户判断是目录或者文件,
#第二个位置变量用于给子目录或者子文件实现位移(缩进)用的
list_files "/var/log" ""





创建库
示例一:
#步骤一:建立函数库
vim myfuncs.sh
jiafa()
echo $[$1 + $2]


jainfa()
echo $[$1 + $2]


chengfa()
echo $[$1 * $2]


chufa()
if [ $2 -ne 0 ]; then
echo $[$1 / $2]
else
echo "$2不能为0"
fi


fact()
if [ $1 -eq 1 ]; then
echo 1
elif [ $1 -eq 0 ]; then
echo 0
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi



【shell函数应用】
步骤二:在其他脚本中调用函数库
#!/bin/bash
. ~/jiaoben/demon7.sh

v1=$1
v2=$2

res1=$(jiafa $v1 $v2)
res2=$(jianfa $v1 $v2)
res3=$(chengfa $v1 $v2)
res4=$(chufa $v1 $v2)
res5=$(fact $v1)

echo"加法结果为:$res1"
echo"减法结果为:$res2"
echo"乘法结果为:$res3"
echo"除法结果为:$res4

    推荐阅读