前言
使用linux的shell编程,可以说函数是非常重要的内容,也是在编写各类shell脚本的时候经常用到的,本篇将介绍下函数相关的使用。
shell 函数分类
- 系统函数
- 自定义函数
系统函数
系统函数为linux自带的函数, 可以在shell编写中直接使用。下面介绍几种常用的系统函数
1、basename
用于获取文件名函数, 根据给出的文件路径截取出文件名;
语法
basename [string / pathname] [suffix]
- 根据根据指定字符串或路径名进行截取文件名, 比如: 根据路径”/root/shells/aa.txt”, 可以截取出aa.txt;
- suffix: 用于截取的时候去掉指定的后缀名;
简单案例
比如在当前目录下,有一个叫ch1.sh的文件,使用该命令的效果如下
该命令的用途
- 遍历某个文件目录之后,可以使用该命令拿到该目录下的文件名称做后续处理;
- 拿到文件名称之后,更改某个匹配的文件的权限等;
2、dirname
从指定文件的绝对路径, 去除文件名,返回剩下的前缀目录路径
语法
dirname 文件绝对路径
简单案例
更多的系统函数,可以使用: declare -f 命令进行查看
自定义函数
shell编程人员可以通过自定义开发函数,实现代码重用,提升模块的封装性、可读性以及可维护性;
语法
# 函数的定义
[ function ] funname ()
{
命令
[return 返回值]}
# 调用函数
funname 传递参数1 传递参数2 …
语法说明
- 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数;
- 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值,return后跟数值n(0~255);
注意点
必须在调用函数地方之前,先声明函数再调用,shell脚本是逐行运行的, 只有先运行了函数, 后面的动作才可以使用函数;
案例1:无参无返回值函数
#!/bin/bashhello(){ echo "hello func"}hello
调用下这个脚本,观察效果展示
案例2:无参有返回值函数
#! /bin/bashfunction sum(){ echo "求两个数的和..." read -p "请输入第一个数字: " n1 read -p "请输入第二个数字: " n2 echo "两个数字分别为 $n1 和 $n2 " return $(($n1+$n2))}sumecho "两个数字的和为: $" />
运行上面的shell,观察输出效果
案例3:有参函数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过
$n
的形式来获取参数的值,例如,$1
表示第一个参数,$2
表示第二个参数...
其他参数介绍
参数处理 | 说明 |
---|---|
$# | 传递到脚本或函数的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$" />补充:Shell程序与函数的区别函数和shell程序比较相似,区别在于:
linux shell编程常用案例介绍以下结合前面关于shell编程技术点的介绍,列举常用的一些可以使用shell编程来处理的场景 1、日志(数据)备份比如生产环境下,为了保留每天的核心日志,可以使用定时任务,调度某个shell脚本,在脚本中编写程序用于备份日志数据 参考示例
2、监控内存和磁盘容量,小于给定值时报警当生产服务器的内存和磁盘容量不足时,可以通过编写shell进行监控报警 参考示例
3、查看有多少远程 IP 连接本机参考示例
4、编写nginx启动脚本在实际的运维中,很多中间件服务,为了方便管理各个中间件服务,可以考虑将其做成各类启动脚本,统一维护,下面以nginx为例说明(其他的,比如redis,zk等可以类似的参考进行编写);
|