shell函数
shell函数的定义:
将命令序列按格式写在一起
可方便重复使用目录序列
shell函数的格式:
【1】
function 函数名 {
命令序列
}
【2】
函数名 () {
命令序列
}
# !/bin/bash
#定义函数user( ) {
useradd $name
echo 123456 | passwd --stdin $name
}
##########main###########
read -p "请输入要创建的用户名:" name
#调用函数
user
函数的返回值:
- return表示退出函数并返回一个退出后值,脚本中可以使用$?变量显示该值
使用原则:
1.函数一结束就取返回值,因为$?变量只能返回执行的最后一条命令的退出状态码
2.退出状态码必须是0~255,超出时值将为除以256取余
-
echo 输出相应的返回值
db1 () { read -p "输入一个数" num echo $[$num*2] } result=`db1` echo $result
函数传参
c和java中的形参和实参
形参
user(spring name) {
useradd name
}
实参
user(zhangsan)
shell中通过位置参数传参
sum1 () {
sum=$[$1+$2]
echo $sum
}
######### main ###########
read -p "输入第一个参数" first
read -p "输入第二个参数" second
result=$(sum1 $first $second)
echo $result
或者
sum1 () {
sum=$[$1+$2]
echo $sum
}
######### main ###########
result=$(sum1 $1 $2)
echo $result
函数变量的作用范围:
linux全局变量局部变量
全局变量:变量作用于整个操作系统所有用户的shell环境内
局部变量:变量只作用于当前shell环境内
shell脚本全局变量局部变量
全局变量:作用于shell脚本当前的整个shell环境内,包括所有函数体内或函数体外
局部变量:作用于shell脚本当前的sdell环境内,仅限制于某个函数体内
函数在shell脚本中仅在当前shell环境中有效(用source会影响当前的shell环境)
Shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令
#!/bin/bash
myfun () {
echo $i
lcocal i #指定局部变量i=9
i=9
echo $i
}
i=8
myfun
echo $i
#运行结果为
8
9
8
函数递归
函数调用自己本身的函数
阶乘
#!/bin/bash
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
递归目录
#!/bin/bash
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
}
list_files "/var/log"
函数库
创建库
vim ku.sh #创建函数库
#!/bin/bash
jiafa () {
echo $[$1 + $2]
}
jianfa () {
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=$(jianfa $1 1)
local result=$(fact $temp)
#echo $[$1 * $result]
echo $(chengfa $1 $result)
fi
}
vim test.sh #创建测试文件
#!/bin/bash
. ku.sh #调用函数库
value1=$1
value2=$2
result=$(jiafa $value1 $value2)
result2=$(chufa $value1 $value2)
result3=$(fact $value1)
echo "加法结果为: $result"
echo "除法结果为: $result2"
echo "阶乘结果为: $result3"