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

目录
相关文章
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
28天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
Shell Linux C语言
Shell 函数
10月更文挑战第4天
22 7
|
2月前
|
Shell
Shell编程(下)
Shell编程(下)
92 1
|
2月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
42 1
|
2月前
|
Shell Linux 开发工具
|
2月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
71 12
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
46 12