shell编程之函数与数组的使用详解
函数的用法
Shell函数可用于存放一系列的指令。
在Shell脚本执行的过过程中,函数被置于内存中,每次调用函数时不需要从硬盘读取,因此运行的速度比较快。
在Shell编程中函数并非是必须的元素,但使用函数可以对程序进行更好的组织。
将一些相对独立的代码变成函数女,可以提高程序可读性与重用性,避免编写大量重复代码。
Shell函数定义的方法如下所示:
[function]函数名() {
命令序列
[return x]
}
- "function"关键字表示定义一个函数,可以省略;
- "{"符号表示函数执行命令的入口,该符号可以与函数名同行t也可以在函数名下一行的句首;
- "}"符号表示函数体结束,两个大括号之间{}是函数体;
- "命令序列"部分可以是任意的Shell命令,也可以调用其他函数
- "return"表示退出函数返回一个退出值,通过返回值判断执行是否成功,也可以使用exit终止整个Shell脚本。
俩个数求和
使用Shell脚本实现两个数相加求和,通过定义函数的方式来完成。
sum函数内部通过read命接收用户分别输入的两个数,然后做加法运算,最后通过调用函数的方式来输出两个数的和。
[root@localhost ~]# vim sum. sh
#!/bin/bash
sum() {
echo"请输入第一个数:"
read num1
if![[[$num1 =~ ^[0-9]+$ ]];
then
echo"输入的第一个数不是有效的整数,请重新运行脚本并输入正确的数字。"
return 1
fi
echo"请输入第二个数:"
read num2echo"输入的第一个数不是有效的整数,请重新运行脚本并输入正确的数字。"
return 1
fi
echo"请输入第二个数:"
read num2
if![[[ $num2 =~ ^[0-9]+$ ]];
then
echo"输入的第二个数不是有效的整数,请重新运行脚本并输入正确的数字。"
return 1
fi
result=$((num1 + num2))
echo"两数之和为:$result"
sum
[root@localhost ~]# chmod +x sum.sh [root@localhost ~]# ./sum.sh 请输入第一个数:2 请输入第二个数:3 "你输入的两个数为:2和3." "两个数的和为:5"
系统资源监控并报警函数
该函数会定期监控系统的CPU和内存使用率,当使用率超过设定的阈直时,会发送报警信息,这里简单模拟为输出到控制台,实际应用中可扩展为发送邮件、短信等。
[root@localhost ~]# vim jiankong.sh
#!/bin/bash
#发送报警信息的函数
send alert() {
local message=$1
echo "ALERT: $message"
}
monitor_system_resources() {
local cpu_threshold=$1
local mem_threshold=$2
local interval=$3
while true;
do
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print$2+$4}')
mem_usage=$(free | awk '/Mem/ {printf("%.2f",$3/$2 * 1((00)}.
if(( $(echo "$cpu_usage > $cpu_threshold" | bc -1) ));
then
send_alert "CPU usage ($cpu_usage%)."
fi
if(( $(echo "$mem_usage > $mem_threshold" | bc-1) )); then
send_alert "Memory usage ($mem_usage%)."
fi
sleep "$interval"
done
}
monitor_system_resources 5 1 5
- 参数说明:函数接收三个参数,分别是CPU使用率阈值、内存使用率阈值以及监控间隔时间(秒)。
- 循环监控:使用whiletrue循环不断监控系统资源。通过 top和free命令获取CPU和内存使用率,使用bc命令进行浮点数比较。
- 报警处理:当使用率超过阈值时,调用send_alert函数发送报警信息。
函数变量的作用范围
在编写脚本时,有时需要将变量的值限定在函数内部,可以通过内置命令local来实现。函数内部变量的使用,可以避免函数内外同时出现同名变量对脚本结果的影响。
[root@localhost ~]# vim fun_scope.sh
myfun ()
{
local i
i=8
echo $i
}
i=9
myfun
echo $i
[root@localhost ~]# chmod +x fun_scope.sh [root@localhost ~]# ./fun_scope.sh 8 9
函数的参数
函数的参数的用法如下。
函数名称 参数1 参数2 参数3.
在使用函数参数时,函数名称在前参数在后,函数名和参数之间用空格分隔,可以有多个参数,参数使用$1,$2,$3....的方式表达。
[root@localhost ~]# vim write_log.sh
#!/bin/bash
mydir="/data" outfile="${mydir}/my.log"
[ -e "${mydir}" ] | mkdir -p ${mydir}
appendfile()
{
echo "$2" >> "$1"
}
appendfile ${outfile} "first line content."
appendfile ${outfile} "second line content."
[root@localhost ~]# chmod +x write_log.sh [root@localhost ~]# ./write_log.sh [root@localhost ~]# cat /data/my.log firstline content. second line content.
递归函数
Shell也可以实现递归函数,就是可以调用自己本身的函数。
在Linux系统上编写Shell脚本的时候,经常需要递归遍历系统的目录,列出目录下的文件和和目录,逐层递归列出,并对这些层级关系进行展示。
[root@localhost ~]# vim fun_recursion.sh
#!/bin/bash
traverse_directory() {
local dir=$1
for item in "$dir"/*;
do
if [ -d "$item" ];
then
echo "Directory: $item"
traverse_directory "$item"
elif [ -f "$item" ];
then
echo "File: $item"
fi
done
}
traverse_directory "."
[root@localhost ~]# chmod +x fun_recursion.sh [root@localhost ~]# ./fun_recursion.sh
栏 目:Linux
下一篇:深入理解Apache Kafka(分布式流处理平台)
本文标题:shell编程之函数与数组的使用详解
本文地址:https://www.idc91.com/fuwuqizl/5054.html
您可能感兴趣的文章
- 10-28Linux线程之线程的创建、属性、回收、退出、取消方式
- 10-28Linux下进程的CPU配置与线程绑定过程
- 10-28Linux进程CPU绑定优化与实践过程
- 10-28linux服务器查看进程、线程数量方式
- 10-28Linux下如何清理系统缓存并释放内存
- 10-28Linux如何解决kill进程失败问题
- 10-28CentOS系统下前后端项目部署的操作指南
- 10-28Linux gdb多进程、多线程调试过程
- 10-28Apache HTTP Server 从安装到配置过程详解
- 10-28Ubuntu 24.04启用root图形登录的操作流程


阅读排行
推荐教程
- 05-27Linux NFS服务器安装与配置思路分析
- 05-27阿里云linux服务器安全设置(防火墙策略等)
- 05-27Linux命令学习总结之rmdir命令
- 10-12Linux系统 Centos7.4手动在线升级到Centos7.7
- 05-27SecureCRT中文显示乱码问题的解决方法
- 11-07Linux搭建DHCP服务器的详细过程
- 05-10Ubuntu系统安装ANSYS2021R1
- 06-12linux系统SSL证书部署https单/多站点
- 05-10ANSYS2021R1安装方法Linux centos Ubuntu系统
- 05-27apache密码生成工具htpasswd使用详解


