Shell 编程基础

学习 Shell 脚本编程,实现系统自动化和任务批处理

什么是 Shell?

Shell 是用户与 Linux 系统内核之间的接口程序。它既是命令解释器,也是一种编程语言。 通过 Shell 脚本,我们可以将多个命令组合起来,实现复杂的自动化任务。

#!/bin/bash
# 这是一个简单的 Shell 脚本
echo "Hello, Linux Cloud Lab!"

常见的 Shell 类型

Bash (Bourne Again Shell)

最常用的 Shell,Linux 系统默认 Shell

/bin/bash

Zsh (Z Shell)

功能强大,支持插件和主题

/bin/zsh

Fish (Friendly Interactive Shell)

用户友好,智能补全

/usr/bin/fish

Dash

轻量级,启动速度快

/bin/dash

创建第一个 Shell 脚本

步骤 1:创建脚本文件

$ nano hello.sh

步骤 2:编写脚本内容

# 指定解释器
#!/bin/bash
# 输出欢迎信息
echo "欢迎使用 Linux Cloud Lab!"
echo "当前时间: $(date)"
echo "当前用户: $(whoami)"

步骤 3:添加执行权限

$ chmod +x hello.sh

步骤 4:运行脚本

$ ./hello.sh
欢迎使用 Linux Cloud Lab!
当前时间: Sun Dec 15 14:30:25 CST 2025
当前用户: user

Shell 脚本基本语法

注释

# 这是单行注释
echo "Hello World" # 行末注释

变量定义

name="Linux Cloud Lab"
count=100
echo "欢迎来到 $name"
echo "学员数量: $count"

命令替换

current_date=$(date)
file_count=`ls | wc -l`
echo "今天是: $current_date"
echo "文件数量: $file_count"

输入输出

echo "请输入您的姓名:"
read username
echo "您好, $username!"

实用脚本示例

系统信息脚本

#!/bin/bash
echo "=== 系统信息 ==="
echo "主机名: $(hostname)"
echo "操作系统: $(uname -s)"
echo "内核版本: $(uname -r)"
echo "CPU 信息: $(lscpu | grep 'Model name' | cut -d: -f2)"
echo "内存使用: $(free -h | grep Mem | awk 'print $3 "/" $2')"

文件备份脚本

#!/bin/bash
source_dir="/home/user/documents"
backup_dir="/backup"
timestamp=$(date +%Y%m%d_%H%M%S)
backup_file="backup_$timestamp.tar.gz"
tar -czf "$backup_dir/$backup_file" "$source_dir"
echo "备份完成: $backup_file"

最佳实践

推荐做法

  • 总是在脚本开头指定解释器
  • 使用有意义的变量名
  • 添加适当的注释
  • 检查命令执行结果

避免的做法

  • 不检查文件是否存在就操作
  • 硬编码路径和配置
  • 忽略错误处理
  • 不验证用户输入

继续学习

掌握了 Shell 基础后,继续学习更高级的内容