Shell 的基本介绍、常用命令以及流程控制如何学习?

文章导读
Shell 是 Linux 系统中连接用户与内核的桥梁,掌握它能显著提升自动化运维效率。建议初学者先从 bash 基础语法入手,通过编写简单的脚本熟悉变量和流程控制,再逐步过渡到复杂任务。
📋 目录
  1. 命令速用版
  2. 核心语法与代码示例
  3. 分步处理
  4. 实战案例:日志清理脚本
  5. 调试与验证
  6. 常见坑
  7. 参考来源
A A

Shell 是 Linux 系统中连接用户与内核的桥梁,掌握它能显著提升自动化运维效率。建议初学者先从 bash 基础语法入手,通过编写简单的脚本熟悉变量和流程控制,再逐步过渡到复杂任务。

先说结论:Shell 脚本是运维和开发的核心技能,重点在于理解解释器机制和逻辑控制,而非死记命令。

  • 适合:Linux 运维人员、后端开发及需要批量处理任务的用户
  • 先看:解释器声明(shebang)、变量赋值规则及基础流程控制语法
  • 建议:通过小任务(如文件备份、日志分析)练习流程控制,避免只看不练

命令速用版

以下是快速检查环境和运行脚本的常用命令,可直接在终端执行:

# 查看系统支持的 Shell 列表
cat /etc/shells

# 查看当前 Shell 路径
echo $SHELL

# 创建脚本文件
vim test.sh

# 赋予执行权限
chmod +x test.sh

# 语法检查(不执行,仅查错)
bash -n test.sh

# 执行脚本(两种方式)
./test.sh
bash test.sh

核心语法与代码示例

Shell 本质上是一个命令解释器,它接收用户输入的命令并传递给内核执行,同时也是一门编程语言。学习 Shell 的核心价值在于将重复的手动操作转化为可复用的脚本。以下是流程控制的具体代码模板,可直接复用:

1. 条件判断 (if/else)
用于判断文件是否存在或命令是否执行成功:

#!/bin/bash
if [ -f "/etc/passwd" ]; then
    echo "文件存在"
else
    echo "文件不存在"
fi

2. 循环结构 (for/while)
用于遍历列表或重复执行任务:

#!/bin/bash
# for 循环示例
for i in 1 2 3; do
    echo "数字:$i"
done

# while 循环示例
count=1
while [ $count -le 3 ]; do
    echo "计数:$count"
    count=$((count + 1))
done

分步处理

按照以下步骤逐步建立知识体系,每步完成后确保能独立运行示例:

1. 确认环境
检查当前使用的 Shell 类型,大多数 Linux 发行版默认使用 bash。使用echo $SHELL查看路径,确保脚本首行声明与之一致,通常写#!/bin/bash

2. 编写第一个脚本
创建hello.sh,写入echo "Hello World"。注意首行必须指定解释器,否则可能无法识别内嵌命令。

3. 掌握变量用法
定义变量时等号两边不能有空格,如name="Shell"。使用变量时推荐加花括号,如${name},以便明确变量边界。

4. 函数与复用
将常用逻辑封装为函数,支持带参数调用。可通过外部配置文件存储公用变量,实现脚本模块化。

实战案例:日志清理脚本

结合变量与流程控制,以下是一个清理 7 天前日志的完整脚本示例,包含错误处理:

#!/bin/bash

LOG_DIR="/var/log/myapp"
RETENTION_DAYS=7

# 检查目录是否存在
if [ ! -d "$LOG_DIR" ]; then
    echo "错误:目录 $LOG_DIR 不存在"
    exit 1
fi

# 查找并删除旧日志
find "$LOG_DIR" -name "*.log" -type f -mtime +$RETENTION_DAYS -exec rm -f {} \;

# 验证执行结果
if [ $? -eq 0 ]; then
    echo "日志清理完成"
else
    echo "清理过程中出现错误"
    exit 1
fi

调试与验证

脚本编写完成后,通过以下方式确认逻辑正确:

  • 语法检查:执行前使用bash -n script.sh检查语法错误,避免运行时报错。
  • 调试模式:使用bash -x script.sh或在脚本开头添加set -x,打印每一行执行的命令,便于定位逻辑问题。
  • 退出状态:执行后通过echo $?查看上一条命令的退出状态码,0 通常表示成功。
  • 逻辑测试:针对 if 判断,分别构造满足和不满足条件的输入,观察分支执行是否符合设计。
  • 权限验证:确保脚本有执行权限(chmod +x),否则直接运行会报 Permission denied。

常见坑

初学者容易在以下细节上出错,排查问题时优先检查这些点:

  • 空格问题:变量赋值时=周围不能有空格,否则会被视为命令而非赋值。
  • 解释器声明:脚本第一行缺少#!/bin/bash可能导致某些内嵌命令无法识别。
  • 执行路径:运行当前目录脚本必须加./,如./script.sh,否则系统会在 PATH 中查找而找不到。
  • 变量作用域:数组操作或特殊字符处理时,建议给变量加上{},如${var},避免解析错误。
  • 权限缺失:新建脚本默认无执行权限,忘记chmod +x会导致无法直接运行。

参考来源