第 4 章:Shell 编程基础
学习目标
- 理解 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,实现以下功能:
- 接受一个目录路径作为参数
- 检查目录是否存在
- 创建备份目录(带时间戳)
- 复制文件到备份目录
- 输出备份完成信息
#!/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"