shell_函数的传参_递归_创建库
shell函数
- 一.shell函数
- 1.概述
- 2.函数的格式
- 二.函数返回值
- return
- 使用原则:
- return 获取值,echo $?得出输出值:
- echo的值交给变量,输出变量得出值:
- 三.函数传参
- 方法1:
- 方法二:
- 例题:
- 1-10的累计和乘2的结果(传参的方式):
- 四.函数变量的作用范围
- 1.概述
- 五.递归
- 1.阶乘
- 2.递归目录
- 3.函数库
- 创建库:
- 调用库运算:
一.shell函数
1.概述
- 将命令序列按格式写在一起
- 可方便重复使用命令序列
2.函数的格式
格式1:
function 函数名 {
命令序列
}
格式2:
函数名() {
命令序列
}
二.函数返回值
return
- return表示退出函数并返回一个退出值,脚本中可以用 $ ? 变量显示该值
使用原则:
1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
2、退出状态码必须是0~255,超出时值将为除以256取余
#!/bin/bash
function sum {
read -p "请输入:" c
return $[$c * 2]
}
sum
echo $?
return 获取值,echo $?得出输出值:
#!/bin/bash
sum () {
read -p "请输入:" c
echo $[$c * 2]
}
result=`sum`
echo $result
echo的值交给变量,输出变量得出值:
三.函数传参
方法1:
#!/bin/bash
sum () {
i=$[$1 + $2]
echo $i
}
sum $1 $2
方法二:
#!/bin/bash
sum () {
i=$[$1 + $2]
echo $i
}
read -p "请输入第一个参数值" a
read -p "请输入第二个参数值" b
sum $a $b
例题:
1-10的累计和乘2的结果(传参的方式):
#!/bin/bash
sum () {
sen=0
for ((a=$1; a<=$2; a++))
do
sen=$[$sen + $a]
done
echo $sen
}
result=`sum $1 $2`
echo $[$result * 2]
四.函数变量的作用范围
1.概述
- 函数在shell脚本中仅在当前shell环境中有效
- shell脚本中变量默认全局有效
- 将变量限定在函数内部使用local命令
五.递归
1.阶乘
阶乘指从1乘以2乘以3乘以4一直乘到所要求的数
!/bin/bash
ccc() {
if [ $1 -ne 1 ]
then
local temp=$[$1-1]
local result=ccc $temp
echo $[$1*$result]
else
echo 1
fi
}
read -p "请输入:" n
ccc $n
2.递归目录
#!/bin/bash
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" ""
3.函数库
- 函数写入空文件中,运用时,调用空文件
创建库:
#!/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
}
调用库运算:
. /root/myfuncs.sh
read -p "输入第一个参数值" a
read -p "输入第二个参数值" b
results1=`jiafa $a $b`
results2=`jianfa $a $b`
results3=`chengfa $a $b`
results4=`chufa $a $b`
echo "加法结果为:$results1"
echo "减法结果为: $results2"
echo "乘法结果为:$results3"
echo "除法结果为:$results4"
还没有评论,来说两句吧...