shell函数
介绍及使用
Shell脚本模块化核心总结
问题根源:脚本从上到下顺序执行,代码量一大(300-500行),调试、改序、排错都变成复制粘贴的体力活,甚至比重写还慢。
解决方案:代码模块化 —— 按功能拆分,按需调用。
具体做法:
用函数封装重复逻辑
拆成独立
.sh文件,用source加载主脚本只保留流程调度,具体实现放模块里
核心收益:
改顺序 → 调换函数调用顺序即可
排错 → 锁定模块范围,不受其他代码干扰
复用 → 写好的模块可被多个脚本共用
一句话心法:主脚本读起来像目录,全是函数名,没有实现细节。
📌 Shell 函数
定义:将一组命令或语句封装成带名字的代码块,后续可通过函数名直接调用。
本质:给完成特定功能的一段代码命名、封装。
优点:
一句话总结:函数就是把重复做的事打包起个名,用的时候喊一声就行。
函数定义
语法一:
函数名() {
代码块
return N
}
语法二:
function 函数名() {
代码块
return N
}
函数中return说明:
1.return可以结束一个函数,类似于前面讲的循环控制语句break(结束当前循环,执行循环体后面的代码)
2.return默认返回函数中最后一个命令的退出状态,也可以给定参数值,该参数值的范围是0-256之间。
3.如果没有return命令,函数将返回最后一个Shell的退出值。函数调用
当前命令行调用
# 函数调用案例(测试内容)
#!/bin/bash
hello(){
echo "hello chenxiansen $1"
hostname
}
menu(){
cat << EOF
1. mysql
2. web
3. app
4. exit
EOF
}
# 执行的两种方式(在当前 Shell 环境中加载才能在后续调用这些函数)
source ceshi.sh
. ceshi.sh
# 执行函数结果显示
[root@localhost shell]# hello 777
hello chenxiansen 777
localhost.localdomain
# 执行函数结果显示
[root@localhost shell]# menu
1. mysql
2. web
3. app
4. exit定义到用户的环境变量中
# 体系流程图
┌─────────────────────────────────────────────────────────┐
│ Linux 配置文件体系 │
├─────────────────────────────────────────────────────────┤
│ │
│ /etc/profile ← 系统级(所有用户,登录时执行) │
│ │ │
│ ├──→ /etc/bashrc ← 系统级(所有用户,每次开终端) │
│ │ │
│ └──→ ~/.bash_profile ← 用户级(当前用户,登录时) │
│ │ │
│ └──→ ~/.bashrc ← 用户级(当前用户,每次开终端)│
│ │
└─────────────────────────────────────────────────────────┘
# 查看配置文件
[root@localhost shell]# cat ~/.bashrc
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
hello(){
echo "hello chenxiansen $1"
hostname
}
menu(){
cat << EOF
1. mysql
2. web
3. app
4. exit
EOF
}
注意:
当用户打开bash的时候会读取该文件脚本中调用
#!/bin/bash
#打印菜单
source ./ceshi.sh
menu(){
cat << END
h 显示命令帮助
f 显示磁盘分区
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出程序
END
}
menu //调用函数
# 脚本流程图
┌─────────────────────────────────────────────┐
│ ./这个脚本.sh │
│ │
│ 1. 加载 ceshi.sh │
│ └─ 把 hello、menu(旧版)加载进来 │
│ │
│ 2. 定义 menu(新版) │
│ └─ 覆盖了旧版 menu │
│ │
│ 3. 调用 menu │
│ └─ 显示新版菜单 │
│ │
│ 结果:显示系统运维菜单 │
└─────────────────────────────────────────────┘
原创
shell函数
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法