Linux Shell 和 Shell 脚本详解有哪些核心内容?

文章导读
Shell 是用户与 Linux 内核交互的桥梁,而 Shell 脚本则是将命令批量自动化的工具,日常运维中最推荐使用 Bash 进行脚本编写。
📋 目录
  1. 环境检查与命令
  2. 核心语法逻辑
  3. 实战案例:批量备份日志
  4. 调试与排错
  5. 常见坑与规范
A A

Shell 是用户与 Linux 内核交互的桥梁,而 Shell 脚本则是将命令批量自动化的工具,日常运维中最推荐使用 Bash 进行脚本编写。

先说结论:Shell 负责解释命令,脚本负责批量执行,掌握 Bash 基础即可应对大多数场景。

  • 适合:Linux 运维、自动化部署、定时任务处理。
  • 先看:系统默认 Shell 类型及脚本解释器声明。
  • 建议:规范编写脚本头部,注意变量赋值空格问题,确保文件 UTF-8 编码。

环境检查与命令

以下是查看当前 Shell 环境及版本的基础命令,可直接在终端执行:

echo $SHELL
cat /etc/shells
bash `--version`
echo $0

核心语法逻辑

掌握以下核心语法是编写有效脚本的关键:

1. 变量定义
变量名与等号之间不能有空格:

Linux Shell 和 Shell 脚本详解有哪些核心内容?
NAME="Linux"
echo $NAME

2. 条件判断
注意括号内的空格:

if [ -f "/etc/passwd" ]; then
    echo "File exists"
else
    echo "File missing"
fi

3. 循环处理
遍历文件列表:

for file in *.log; do
    echo "Processing $file"
done

实战案例:批量备份日志

以下脚本演示如何查找特定目录下的日志文件并打包备份:

#!/bin/bash
# 定义备份目录
BACKUP_DIR="/tmp/backup"
mkdir -p $BACKUP_DIR

# 遍历当前目录下的 log 文件
for log in *.log; do
    if [ -f "$log" ]; then
        cp "$log" "$BACKUP_DIR/"
        echo "Backed up: $log"
    fi
done

echo "Backup completed."

调试与排错

脚本执行异常时,可使用以下方法排查:

Linux Shell 和 Shell 脚本详解有哪些核心内容?

1. 开启调试模式
使用 -x 参数打印执行过程:

bash -x script.sh

2. 检查退出状态
执行后立即查看状态码:

echo $?
# 0 表示成功,非 0 表示失败

3. 严格模式
在脚本头部加入 set -e 遇到错误立即退出,防止错误累积:

#!/bin/bash
set -e

常见坑与规范

1. 变量赋值空格
定义变量时,变量名和等号之间不能有空格,否则会被视为命令而非赋值。

Linux Shell 和 Shell 脚本详解有哪些核心内容?

2. 执行路径问题
直接输入 script.sh 可能无法运行,因为当前目录通常不在 PATH 环境变量中,需写成 ./script.sh 告诉系统在当前目录查找。

3. 解释器兼容性
不同 Shell(如 sh、bash、zsh)语法有差异。虽然 RedHat 系列中 /bin/sh 常指向 bash,但在 Debian 系列中可能指向 dash,建议脚本头部明确指定 #!/bin/bash 以避免兼容性问题。

4. 编码与注释
建议确保文件保存为 UTF-8 编码,现代环境通常支持中文注释,但需保证终端与文件编码一致。

更多细节可查阅官方文档:man bash 或 GNU Bash Manual。