shell编程之函数

简介: shell编程之函数

shell编程之函数

一、函数的作用

  1. 将命令序列按格式写在一起,可方便重复使用命令序列,避免代码重复
  2. 使用函数可以将大的工程分割为若干小的功能模块,代码的可读性更强

二、函数的格式

格式1
function 函数名 {          
    命令序列
 }
函数名       #调用函数
格式2
 函数名 () {               //函数名和小括号之间的空格可有可无
    命令序列
 }
函数名       #调用函数

三、函数返回值

return:表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值

  1. 作用于函数内部,脚本使用return退出函数时只退出函数,不影响脚本后续内容执行
  2. 返回值可自定义,范围是0~255,超出时值将除以255取余。
  3. 业内约定成俗的是,0表示成功,非0表示失败
  4. exit:表示终止函数运行,脚本中使用exit退出函数时直接退出整个脚本,脚本后续内容不再执行,并把指定的退出状态码返回给调用者

四、函数传参

在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递

  • 示例
[root@localhost opt]# vim hanshu2.sh 
sum () {
total=$(($1+$2))
echo $total
}
sum $1 $2

image.png

五、函数变量的范围

  • 函数变量在shell脚本中仅在当前shell环境中使用
  • shell脚本中的变量默认全局有效
  • 如果需要将变量限定在函数内部使用,需要在定义的变量前加上loca命令
  • 示例1
[root@localhost opt]# vim hanshu4.sh
abc () {
a=5
b=6
}
a=9
b=8
abc
echo $a
echo $b

image.png

[root@localhost opt]# vim hanshu4.sh
abc () {
local a=5       #加了local表示只在函数内部生效,在函数外面重新定义,值会改变
b=6
}
a=9
b=8
abc
echo $a
echo $b

image.png

示例2

[root@localhost opt]# vim hanshu3.sh 
abc () {
echo "inside $i"
let i++
local i
i=8
echo "inside $i"
}
i=9           #定义i=9
abc           #调用函数abc
echo "outside $i"   #输出i的值

image.png

六、函数的递归(调用函数本身)

6.1 阶乘

[root@localhost opt]# vim jiecheng.sh 
jiecheng () {
#$1表示调用函数时,后面跟的位置参数。如果值是1,就输出1。
  if [ $1 -eq 1 ]
  then
    echo 1
  else
#定义一个本地变量number,变量值为每次传入的参数值减1
    local number=$(($1-1))
#不停地调用函数自身,直到number的值等于1
    local result=$(jiecheng $number)    #自己乘自己的结果减1
    echo "$(($1*$result))"
  fi
}
read -p "输入一个数,求阶乘:" num
result=`jiecheng $num`
echo $result

image.png

6.2 递归目录

[root@localhost opt]# vim jiecheng2.sh 
mulu () {
for i in `ls $1`
do
  if [ -d "$1/$i" ]
  then
    echo "$2$i"
    mulu "$1/$i" "$2"
  else
    echo "$2$i"
  fi
done
}
mulu $1

image.png

七、函数库

我们可以事先创建一个函数库文件,在里面定义各种常用的函数,然后可以在别的shell脚本中直接引用这个函数库文件,使得不需要再次定义函数即可直接调用函数。

[root@localhost opt]# vim shujuku.sh 
jiafa() {
result=$(($1 + $2))
echo $result
}
jianfa() {
result=$(($1 - $2))
echo $result
}
chengfa() {
result=$(($1 * $2))
echo $result
}
chufa(){
if [ $2 -ne 0 ]
then
  result=$(($1/$2))
  echo $result
else
  echo "分母不能为0"
fi
}


[root@localhost opt]# vim diaoyong.sh 
. /opt/shujuku.sh       #引用函数库文件
read -p "第一个数:" first
read -p "第二个数:" second
a=`jiafa $first $second`
b=`jianfa $first $second`
c=`chengfa $first $second`
d=`chufa $first $second`
echo $a
echo $b
echo $c
echo $d

image.png

目录
相关文章
|
1月前
|
Unix Linux Shell
【Shell 编程指南 日期命令】Date命令:显示与设置系统时间和日期
【Shell 编程指南 日期命令】Date命令:显示与设置系统时间和日期
49 0
|
1月前
|
Shell C++ 开发者
【Shell 编程指南】Shell运算操作符之$[]详解
【Shell 编程指南】Shell运算操作符之$[]详解
18 0
|
2月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
【Linux操作系统】探秘Linux奥秘:shell 编程的解密与实战
61 0
|
13天前
|
监控 Shell 开发工具
Shell编程
Shell编程
|
20天前
|
Shell 应用服务中间件 nginx
shell学习(七) 【shell 函数】
shell学习(七) 【shell 函数】
8 1
|
1月前
|
存储 Java Shell
bigdata-04-shell编程基础
bigdata-04-shell编程基础
19 0
|
1月前
|
Shell Linux C++
【Shell 编程设计】 编写自己的清理后台的Shell脚本
【Shell 编程设计】 编写自己的清理后台的Shell脚本
33 1
|
1月前
|
存储 Shell 数据安全/隐私保护
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
29 0
|
1月前
|
Shell C语言 C++
【Shell 编程指南】shell中的(),{}几种语法用法
【Shell 编程指南】shell中的(),{}几种语法用法
17 0
|
1月前
|
Shell 程序员 Linux
【Shell 编程指南】shell运算操作符之(())
【Shell 编程指南】shell运算操作符之(())
19 0