shell函数及库的创建
Posted 阳光小王子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell函数及库的创建相关的知识,希望对你有一定的参考价值。
shell函数
shell函数定义
- 将命令序列按格式写在一起
- 可方便重复使用命令序列
- shell函数定义
shell函数定义
方法一:
函数名(){
命令序列
}
方法二:
function 函数名 {
命令序列
}
函数返回值
- return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值
- 使用原则
- 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
- 退出状态码必须是0~255,超出时值将为除以256取余
#!/bin/bash
function n {
read -p "请输入一个数:" num
return $[$num * 2]
}
n
echo $?
-----------------------
运行结果:
请输入一个数:100
200
[root@localhost 2]# bash demo4.sh
请输入一个数:200
144
//使用return返回值,200*2=400,超过256,则返回400/256的余数 144
- 如果返回值大于256,我们用echo输出
#!/bin/bash
a() {
read -p "请输入一个数:" num
return $[$num * 2]
}
b=`a` //将函数a执行的结果赋值给变量b
echo "$b"
--------------------------------------------------------
运行结果:
请输入一个数:300
600
函数传参
- 函数外面所调用的$1,$2是执行脚本时后面跟的参数,函数里面的$1,$2是执行函数时后面跟的参数
#!/bin/bash
a() {
echo "第一个位置参数为:$1"
echo "第二个位置参数为:$2"
sum=$[$1+$2]
echo $sum
}
a $2 $1
//调用脚本参数,bash demo4.sh 33 44, $2=44给函数里的$1,$1=33给函数里的$2
//$2给上面的$1; $1给上面的$2
---------------------------
[root@localhost 2]# bash demo4.sh 33 44
第一个位置参数为:44
第二个位置参数为:33
77
函数变量作用范围
- 函数在Shell脚本中仅在当前Shell环境中有效
- Shell脚本中变量默认全局有效
- 将变量限定在函数内部使用local命令
#!/bin/bash
a() {
echo $i //第一个$i调用脚本i=6,输出6
local i //定义i为局部变量,跟脚本i没有关系了
i=5
echo $i //输出为5
}
i=6
a
echo $i //输出为6
---------------------------------
运行结果:
[root@localhost 2]# bash demo4.sh
6
5
6
- 去掉函数里面的局部定义
#!/bin/bash
a() {
echo $i
i=5
echo $i
}
i=6
a
echo $i //会调用函数里面的i,输出值为5
--------------------------------------
运行结果:
[root@localhost 2]# bash demo4.sh
6
5
5
函数的递归
- 函数调用自己本身的函数
- 阶乘
阶乘:
fact() {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo $[$1 * $result]
fi
}
read -p "请输入:" n
result=$(fact $n)
echo $result
- 递归目录
for循环递归目录:
#!/bin/bash
OLDIFS=$IFS
IFS=$IFS:
for a in $PATH
do
echo "$a:"
f=`find $a -type f`
for b in $f
do
if [ -x $b ]
then
echo $b可执行
fi
done
done
IFS=$OLDIFS
--------------------------------------------
函数递归目录:
#!/bin/bash
myfunc (){
for i in $1/*
do
if [ -d $i ]
then
echo "目录为:$2$i"
myfunc "$i" " $2"
else
if [ -x $i ]
then
echo "文件为:$2$i"
fi
fi
done
}
#####main##### //以下为主程序
OLDIFS=$IFS
IFS=$IFS:
for a in `echo $PATH`
do
myfunc $a ""
done
IFS=$OLDIFS
库的建立
建'立加减乘除'库
vim functions.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
}
使用库
vim suanfa.sh //新建一个文件,直接调用'立加减乘除'库
. functions.sh
num1=10
num2=20
res1=`jiafa $num1 $num2`
res2=`jianfa $num1 $num2`
res3=`chengfa $num1 $num2`
res4=`chufa $num1 $num2`
echo "加法结果为:$res1"
echo "减法结果为:$res2"
echo "乘法结果为:$res3"
echo "除法结果为:$res4"
---------------------------------
给权限并运行程序
chmod +x suanfa.sh
./sunfa.sh
以上是关于shell函数及库的创建的主要内容,如果未能解决你的问题,请参考以下文章