Shell 教程(建议收藏)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言:为什么学习 Shell?

在编程与系统管理的世界中,Shell 是连接用户与操作系统的“翻译官”。它不仅是命令行工具的核心,更是自动化任务、优化工作流的高效工具。无论是开发环境配置、数据处理,还是服务器运维,掌握 Shell 能显著提升效率。对于编程初学者,它能快速打开系统底层的“黑箱”;对于中级开发者,则能成为解决复杂问题的“瑞士军刀”。本文将以“Shell 教程”为核心,从基础到实战,逐步揭开 Shell 的神秘面纱。


一、Shell 的核心概念与基础命令

1.1 什么是 Shell?

Shell 是一种命令行解释器,它接收用户输入的命令,并将其转化为操作系统可执行的指令。想象 Shell 是一位“翻译官”:当你输入 ls -l 时,它会将这条命令翻译成系统能理解的操作,例如列出文件详情。常见的 Shell 类型包括 Bash(广泛用于 Linux 和 macOS)、Zsh(功能更强大的 Bash 替代品)和 Fish(面向用户的友好型 Shell)。

1.2 基础命令:与系统对话的起点

以下命令是 Shell 的“入门工具箱”,建议读者在终端中逐一尝试:

文件与目录操作

命令功能描述示例代码
ls列出当前目录文件与子目录ls -l(显示详细信息)
cd [目录路径]切换目录cd Documents
mkdir [目录名]创建新目录mkdir project
touch [文件名]创建空文件touch notes.txt

系统信息查询

命令功能描述示例代码
pwd显示当前工作目录路径pwd/home/user
ps查看当前运行的进程ps aux(详细进程列表)
top实时监控系统资源top → CPU/内存占用

文件内容查看与编辑

命令功能描述示例代码
cat [文件名]显示文件内容cat report.txt
nano/vim [文件名]编辑文件nano config.sh

二、Shell 脚本:从命令到自动化

2.1 脚本的基础语法

Shell 脚本是将多个命令组合成可重复执行的文件。编写脚本如同编写“食谱”:每一步骤(命令)按顺序执行,最终达成目标。

脚本创建步骤:

  1. 新建文件:使用 touch hello.sh 创建脚本文件。
  2. 编辑内容:用 nano hello.sh 编辑文件,输入以下代码:
    #!/bin/bash  
    echo "Hello, Shell World!"  
    
  3. 赋予执行权限:运行 chmod +x hello.sh
  4. 执行脚本:输入 ./hello.sh,终端将输出预设的文本。

关键概念解释:

  • Shebang (#!/bin/bash):告诉系统用哪个 Shell 解释器执行脚本,类似文件的“身份证”。
  • 注释:以 # 开头的文本会被 Shell 忽略,用于解释代码逻辑。

2.2 变量与参数传递

变量是存储数据的“容器”,可在脚本中复用。例如:

#!/bin/bash  
name="Alice"  
echo "Hello, $name!"  # 输出:Hello, Alice!  

参数传递:

通过 $ 符号引用命令行传递的参数:

#!/bin/bash  
echo "欢迎 $1 到达 $2!"  

执行命令 ./greeting.sh Bob 上海 → 输出:欢迎 Bob 到达 上海!


三、流程控制:让脚本“思考”

3.1 条件判断(if 语句)

通过 if 语句,脚本可根据条件执行不同分支,如同交通灯的“红绿灯逻辑”。

示例:检查文件是否存在

#!/bin/bash  
file="data.txt"  
if [ -f "$file" ]; then  
    echo "文件存在!"  
else  
    echo "文件不存在,正在创建..."  
    touch "$file"  
fi  
  • [ -f ]:检查文件是否为普通文件;
  • touch:若文件不存在,自动创建。

3.2 循环结构:重复任务的“传送门”

for 循环:遍历固定范围

#!/bin/bash  
for num in {1..5}; do  
    echo "当前数字:$num"  
done  

输出:

当前数字:1  
当前数字:2  
...  

while 循环:条件满足时持续执行

#!/bin/bash  
count=1  
while [ $count -le 3 ]; do  
    echo "计数:$count"  
    ((count++))  
done  

四、高级技巧与实战案例

4.1 函数:代码复用的“乐高积木”

函数可将常用操作封装,避免重复编写代码。例如:

#!/bin/bash  

greet() {  
    echo "欢迎来到 Shell 世界!"  
}  

greet  

4.2 管道与重定向:数据流动的“高速公路”

管道 (|):串联命令

ls -l | grep "txt"  # 列出以 txt 结尾的文件  

重定向 (>, >>):控制输入输出

echo "新内容" > file.txt  # 覆盖文件内容  
echo "追加内容" >> file.txt  # 追加内容  

4.3 实战案例:自动化备份脚本

需求:每天凌晨 2 点,将指定目录备份到 /backups,并记录日志。

#!/bin/bash  

src_dir="/home/user/project"  
backup_dir="/backups"  
timestamp=$(date +%Y%m%d-%H%M%S)  

tar -czf "$backup_dir/backup-$timestamp.tar.gz" "$src_dir"  

echo "备份完成:$(date)" >> "$backup_dir/backup.log"  


五、调试与优化:让脚本更健壮

5.1 调试命令

使用 -x 参数启用调试模式,追踪脚本执行过程:

bash -x my_script.sh  

输出将显示每一步的变量值与命令执行详情。

5.2 性能优化技巧

  • 减少重复命令调用:例如,避免在循环中频繁执行外部命令。
  • 使用 time 命令:测量脚本执行时间:
    time ./slow_script.sh  
    

结论:持续探索 Shell 的可能性

通过本文,我们从 Shell 的基础命令、脚本编写,到流程控制与实战案例,逐步构建了系统化的 Shell 知识框架。对于编程初学者,Shell 是打开系统底层的钥匙;对于中级开发者,则是提升生产力的“秘密武器”。

未来的学习方向可包括:

  1. 学习高级命令(如 awk, sed);
  2. 结合 Git、Docker 等工具实现复杂自动化;
  3. 掌握 Shell 脚本安全与权限管理。

记住:实践是掌握 Shell 的最佳路径。尝试将日常重复性任务转化为脚本,逐步积累经验,你将发现 Shell 教程中隐藏的无限可能。


(全文约 1800 字)

最新发布