前言
Shell 是 Linux 用户与系统交互的主要方式,尤其在服务器运维、自动化部署、批量管理等场景中,Shell 脚本具有不可替代的作用。本文将系统讲解 Linux Shell 的基础语法、常用命令、流程控制、变量与函数等核心知识点,并结合实际案例进行实战演练,帮助读者从入门到实践掌握 Shell 编程。
一、认识 Shell
1.1 什么是 Shell?
Shell 是用户与内核之间的桥梁,是一种命令解释器。
常见的 Shell 类型包括:
-
sh
:Bourne Shell,传统标准。 -
bash
:Bourne Again Shell,最常用的默认 Shell。 -
zsh
:功能增强的 Shell,适合交互式操作。 -
dash
:轻量快速,Ubuntu 默认用于脚本执行。
1.2 Bash 与 Shell 的区别
Bash 是 GNU 推出的 Bourne Shell 的增强版,是 Shell 的一种实现,具备更多特性,如命令自动补全、数组支持等。
1.3 Shell 脚本的执行方式
# 方式一:直接执行
chmod +x script.sh
./script.sh
# 方式二:通过解释器执行
bash script.sh
二、Shell 基础语法
2.1 注释
-
单行注释以
#
开头
# 这是注释
2.2 变量定义与使用
name="Tom"
echo "Hello, $name"
-
等号两边不能有空格。
-
使用
${}
可以增强变量解析能力:echo "${name}abc"
。
2.3 输入与输出
read -p "请输入用户名: " user
echo "你输入的是:$user"
2.4 运算符
-
算术运算(整数)
a=5
b=3
echo $((a + b))
-
字符串比较:
=
,!=
,<
,>
-
数值比较:
-eq
,-ne
,-lt
,-le
,-gt
,-ge
三、流程控制语句
3.1 if 判断
if [ $a -gt $b ]; then
echo "$a > $b"
elif [ $a -eq $b ]; then
echo "$a = $b"
else
echo "$a < $b"
fi
3.2 case 语句
read -p "请输入(y/n): " choice
case $choice in
y|Y) echo "你选择了是";;
n|N) echo "你选择了否";;
*) echo "无效选择";;
esac
3.3 for 循环
for i in 1 2 3 4 5; do
echo "当前值: $i"
done
3.4 while 循环
count=0
while [ $count -lt 5 ]; do
echo "count: $count"
((count++))
done
3.5 until 循环
until [ $count -ge 5 ]; do
echo "count: $count"
((count++))
done
四、Shell 函数
function say_hello() {
echo "Hello, $1!"
}
say_hello "World"
-
使用
$1
,$2
表示位置参数。 -
return
返回值只能是整数(0-255)。
五、Shell 中的特殊变量
变量 | 含义 |
---|---|
$0 | 当前脚本名 |
$1~$9 | 位置参数 |
$# | 传入参数个数 |
$* | 所有参数(整体) |
$@ | 所有参数(分割) |
$$ | 当前 Shell 进程 ID |
$? | 上一条命令的退出状态 |
六、Shell 脚本实战案例
6.1 批量创建用户
#!/bin/bash
for user in user1 user2 user3; do
if id "$user" &>/dev/null; then
echo "$user 已存在"
else
useradd "$user"
echo "创建 $user 成功"
fi
done
6.2 自动备份指定目录
#!/bin/bash
src=/etc
dst=/backup/etc_$(date +%F).tar.gz
tar -zcf $dst $src && echo "备份成功:$dst"
6.3 检查服务是否存活
#!/bin/bash
service=nginx
if pgrep $service > /dev/null; then
echo "$service 正在运行"
else
echo "$service 未运行,尝试启动..."
systemctl start $service
fi
七、Shell 脚本调试与优化
7.1 调试技巧
-
使用
bash -x script.sh
查看执行过程。 -
在脚本中加入
set -x
开启调试,set +x
关闭。
7.2 错误处理
-
set -e
:一旦出错即退出。 -
set -u
:使用未定义变量时报错。
7.3 脚本优化建议
-
使用函数封装逻辑模块。
-
加入注释与日志输出。
-
使用
trap
捕获信号并清理资源。
八、扩展话题:Shell 与 cron 定时任务
Shell 脚本常与定时任务结合实现自动化。
# 每天凌晨 2 点执行备份脚本
0 2 * * * /home/user/backup.sh
-
crontab -e
编辑任务 -
crontab -l
查看任务
九、总结
Linux Shell 是学习和掌握 Linux 系统的关键技能。通过本篇文章的系统学习,从变量定义到流程控制,从函数封装到脚本实战,再到调试优化与扩展应用,读者可逐步建立 Shell 编程的完整认知体系。
在实际工作中,Shell 脚本广泛应用于日常维护、系统部署、监控报警等自动化任务中,建议多实践、多总结,形成自己的脚本模板库,不断提升工作效率与自动化水平。