Appearance
项目4:简单Shell脚本入门
Shell脚本基础
Shell脚本是一种用于自动化执行命令的脚本语言,它可以帮助我们简化重复的任务,提高工作效率。
什么是Shell?
Shell是一个命令解释器,它是用户与Linux系统之间的接口。常见的Shell有:
bash:Bourne Again Shell,最常用的Shellsh:Bourne Shell,早期的Shellcsh:C Shell,语法类似C语言zsh:Z Shell,功能更强大的Shell
Shell脚本的基本结构
一个基本的Shell脚本包含以下部分:
- Shebang行:指定脚本使用的Shell
- 注释:说明脚本的功能和使用方法
- 命令:要执行的命令
- 变量:存储数据
- 控制结构:条件判断、循环等
- 函数:封装可重用的代码
创建第一个Shell脚本
- 创建脚本文件:
bash
nano hello.sh- 添加以下内容:
bash
#!/bin/bash
# 这是一个简单的Shell脚本
echo "Hello, World!"
echo "当前目录:$(pwd)"
echo "当前用户:$(whoami)"- 添加执行权限:
bash
chmod +x hello.sh- 运行脚本:
bash
./hello.sh变量
定义变量
bash
# 定义变量
name="John"
age=25
# 引用变量
echo "Name: $name"
echo "Age: $age"
# 命令替换
current_date=$(date +%Y-%m-%d)
echo "Current date: $current_date"环境变量
bash
# 查看环境变量
env
# 设置环境变量
export PATH=$PATH:/home/user/bin
# 查看特定环境变量
echo $PATH
echo $HOME
echo $USER控制结构
条件判断
bash
#!/bin/bash
read -p "请输入一个数字:" num
if [ $num -gt 0 ]; then
echo "这是一个正数"
elif [ $num -lt 0 ]; then
echo "这是一个负数"
else
echo "这是零"
fi循环
bash
#!/bin/bash
# for循环
echo "For循环示例:"
for i in 1 2 3 4 5; do
echo "数字:$i"
done
# while循环
echo "\nWhile循环示例:"
i=1
while [ $i -le 5 ]; do
echo "数字:$i"
i=$((i+1))
done编写脚本:自动备份文件、批量创建用户
自动备份文件脚本
创建一个名为 auto_backup.sh 的脚本:
bash
#!/bin/bash
# 自动备份文件脚本
# 设置变量
SOURCE_DIR="/home/user/documents"
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/backup_$DATE.tar.gz"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 执行备份
echo "开始备份..."
tar -czvf $BACKUP_FILE $SOURCE_DIR
echo "备份完成:$BACKUP_FILE"
# 清理旧备份(保留最近7天的)
echo "清理旧备份..."
find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +7 -delete
echo "清理完成"
# 显示备份信息
echo "\n备份信息:"
echo "源目录:$SOURCE_DIR"
echo "备份目录:$BACKUP_DIR"
echo "备份文件:$BACKUP_FILE"
echo "备份大小:$(du -h $BACKUP_FILE | cut -f1)"使用方法:
bash
chmod +x auto_backup.sh
./auto_backup.sh批量创建用户脚本
创建一个名为 create_users.sh 的脚本:
bash
#!/bin/bash
# 批量创建用户脚本
# 检查是否以root身份运行
if [ $EUID -ne 0 ]; then
echo "错误:请以root身份运行此脚本"
exit 1
fi
# 定义用户列表
USERS=("user1" "user2" "user3" "user4" "user5")
# 批量创建用户
for user in "${USERS[@]}"; do
# 检查用户是否存在
if id "$user" &>/dev/null; then
echo "用户 $user 已存在"
else
# 创建用户
useradd -m $user
# 设置默认密码
echo "$user:password123" | chpasswd
# 强制用户首次登录修改密码
passwd -e $user
echo "用户 $user 创建成功"
fi
done
# 显示创建结果
echo "\n用户创建完成,当前用户列表:"
cut -d: -f1 /etc/passwd | grep -E "user[1-5]"使用方法:
bash
chmod +x create_users.sh
sudo ./create_users.sh脚本权限配置与运行测试
脚本权限配置
Shell脚本需要执行权限才能运行,我们可以使用 chmod 命令来设置权限:
bash
# 添加执行权限
chmod +x script.sh
# 查看权限
ls -la script.sh
# 移除执行权限
chmod -x script.sh运行脚本的方式
- 直接运行:
bash
./script.sh- 使用bash命令运行:
bash
bash script.sh- 使用sh命令运行:
bash
sh script.sh- 将脚本添加到PATH:
bash
# 将脚本复制到/usr/local/bin
sudo cp script.sh /usr/local/bin/
# 直接运行脚本
script.sh脚本测试
1. 语法检查
使用 bash -n 命令检查脚本语法:
bash
bash -n script.sh2. 调试脚本
使用 bash -x 命令调试脚本:
bash
bash -x script.sh3. 测试脚本功能
创建测试环境并运行脚本,验证其功能是否正常:
bash
# 创建测试目录
mkdir -p test_dir
# 创建测试文件
echo "test content" > test_dir/file1.txt
echo "test content" > test_dir/file2.txt
# 运行备份脚本
./auto_backup.sh
# 检查备份文件
ls -la /backup/脚本最佳实践
- 添加注释:说明脚本的功能、参数和使用方法
- 使用变量:提高脚本的可维护性
- 错误处理:添加错误检查和处理机制
- 日志记录:记录脚本的执行过程和结果
- 安全性:避免使用硬编码的密码和敏感信息
- 可移植性:使用标准Shell语法,避免使用特定Shell的特性
- 模块化:将复杂的功能封装为函数
示例:带日志和错误处理的脚本
bash
#!/bin/bash
# 带日志和错误处理的脚本
# 设置日志文件
LOG_FILE="/var/log/my_script.log"
# 日志函数
log() {
echo "[$(date +%Y-%m-%d %H:%M:%S)] $1" >> $LOG_FILE
echo "$1"
}
# 错误处理函数
error_exit() {
log "错误:$1"
exit 1
}
# 检查依赖命令
check_dependencies() {
log "检查依赖命令..."
for cmd in tar gzip find; do
if ! command -v $cmd &>/dev/null; then
error_exit "缺少命令:$cmd"
fi
done
log "依赖检查完成"
}
# 主函数
main() {
log "开始执行脚本"
# 检查依赖
check_dependencies
# 执行任务
log "执行备份任务..."
# 这里添加具体的备份命令
log "脚本执行完成"
}
# 运行主函数
main通过以上步骤,我们学习了Shell脚本的基础知识,编写了自动备份文件和批量创建用户的脚本,并学习了脚本权限配置和运行测试的方法。这些技能对于自动化Linux系统管理任务非常重要。
