学习目标

  • 理解 Shell 的作用
  • 掌握 Shell 脚本编写
  • 学会使用变量和控制结构

4.1 什么是 Shell

Shell 是用户与 Linux 内核交互的接口。常见的 Shell:

  • Bash:最常用
  • Zsh:功能更强大
  • Fish:用户友好

4.2 第一个 Shell 脚本

创建 hello.sh

#!/bin/bash
# 这是注释

echo "Hello, XUPTArch!"
echo "当前用户:$USER"
echo "当前目录:$PWD"

运行:

chmod +x hello.sh
./hello.sh

4.3 变量

#!/bin/bash

# 定义变量(注意等号两边不能有空格)
name="XUPTArch"
count=10

# 使用变量
echo "Name: $name"
echo "Count: $count"

# 命令替换
current_date=$(date +%Y-%m-%d)
echo "Today: $current_date"

# 读取用户输入
read -p "Enter your name: " username
echo "Hello, $username!"

4.4 条件判断

#!/bin/bash

# if 语句
if [ -f "file.txt" ]; then
    echo "文件存在"
else
    echo "文件不存在"
fi

# 数值比较
num=10
if [ $num -gt 5 ]; then
    echo "大于5"
fi

# 字符串比较
str="hello"
if [ "$str" = "hello" ]; then
    echo "匹配"
fi

常用测试条件

  • -f file:文件存在
  • -d dir:目录存在
  • -eq:等于
  • -ne:不等于
  • -gt:大于
  • -lt:小于

4.5 循环

#!/bin/bash

# for 循环
for i in 1 2 3 4 5; do
    echo "Number: $i"
done

# 遍历文件
for file in *.txt; do
    echo "Processing $file"
done

# C 风格循环
for ((i=0; i<5; i++)); do
    echo $i
done

# while 循环
count=0
while [ $count -lt 5 ]; do
    echo $count
    count=$((count + 1))
done

4.6 函数

#!/bin/bash

# 定义函数
greet() {
    echo "Hello, $1!"
}

add() {
    local result=$(($1 + $2))
    echo $result
}

# 调用函数
greet "XUPTArch"
sum=$(add 3 5)
echo "Sum: $sum"

实践练习

编写脚本 backup.sh,实现以下功能:

  1. 接受一个目录路径作为参数
  2. 检查目录是否存在
  3. 创建备份目录(带时间戳)
  4. 复制文件到备份目录
  5. 输出备份完成信息
#!/bin/bash

if [ $# -eq 0 ]; then
    echo "用法: $0 <目录路径>"
    exit 1
fi

src_dir=$1
backup_dir="backup_$(date +%Y%m%d_%H%M%S)"

if [ ! -d "$src_dir" ]; then
    echo "错误:目录不存在"
    exit 1
fi

mkdir -p "$backup_dir"
cp -r "$src_dir"/* "$backup_dir"/
echo "备份完成:$backup_dir"

下一步

第 5 章:Git 与 GitHub 入门

更新时间: