首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Linux/Unix系统主流脚本语言--Bash语言

Linux/Unix系统主流脚本语言--Bash语言

作者头像
一个平凡而乐于分享的小比特
发布2026-02-02 16:40:15
发布2026-02-02 16:40:15
240
举报

🔥作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生,研究方向无线联邦学习 🎬擅长领域:驱动开发,嵌入式软件开发,BSP开发 ❄️作者主页:一个平凡而乐于分享的小比特的个人主页 ✨收录专栏:自动化脚本语言,本专栏专门讲述一些常用的自动化脚本语言,以方便日常开发 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖

在这里插入图片描述
在这里插入图片描述

Linux/Unix系统主流脚本语言–Bash语言

一、Shell脚本基础

1.1 Shell脚本基本结构
代码语言:javascript
复制
#!/bin/bash
# 这是一个注释
# 脚本说明:自动化批处理脚本示例

# 脚本主体代码
echo "Hello, World!"
1.2 创建和执行脚本
代码语言:javascript
复制
# 创建脚本文件
touch myscript.sh

# 添加执行权限
chmod +x myscript.sh

# 执行脚本
./myscript.sh
# 或
bash myscript.sh

二、Shell脚本核心语法

2.1 变量
代码语言:javascript
复制
#!/bin/bash
# 变量定义和使用
NAME="Linux User"
AGE=25
echo "Name: $NAME"
echo "Age: $AGE"

# 只读变量
readonly PI=3.14

# 环境变量
echo "PATH: $PATH"
echo "HOME: $HOME"

# 特殊变量
echo "脚本名: $0"
echo "参数1: $1"
echo "参数个数: $#"
echo "所有参数: $@"
echo "退出状态: $?"
2.2 输入输出
代码语言:javascript
复制
#!/bin/bash
# 标准输出
echo "This is output"

# 格式化输出
printf "Name: %s, Age: %d\n" "John" 25

# 读取输入
echo "请输入您的名字:"
read username
echo "你好, $username"

# 从文件读取
while read line; do
    echo "行内容: $line"
done < input.txt

三、流程控制

3.1 条件判断
代码语言:javascript
复制
#!/bin/bash
# if-else语句
if [ "$1" -gt 10 ]; then
    echo "大于10"
elif [ "$1" -eq 10 ]; then
    echo "等于10"
else
    echo "小于10"
fi

# case语句
case $1 in
    start)
        echo "启动服务"
        ;;
    stop)
        echo "停止服务"
        ;;
    restart)
        echo "重启服务"
        ;;
    *)
        echo "用法: $0 {start|stop|restart}"
        ;;
esac
3.2 循环结构
代码语言:javascript
复制
#!/bin/bash
# for循环
for i in {1..5}; do
    echo "数字: $i"
done

for file in *.txt; do
    echo "处理文件: $file"
done

# while循环
count=1
while [ $count -le 5 ]; do
    echo "计数: $count"
    ((count++))
done

# until循环
num=1
until [ $num -gt 5 ]; do
    echo "直到计数: $num"
    ((num++))
done

四、常用命令

4.1 文件和目录操作
代码语言:javascript
复制
# 创建目录
mkdir -p /path/to/directory

# 复制文件
cp source.txt destination.txt
cp -r source_dir/ dest_dir/  # 递归复制目录

# 移动/重命名
mv old.txt new.txt
mv file.txt /path/to/destination/

# 删除
rm filename.txt
rm -rf directory/  # 强制递归删除

# 查看文件
cat file.txt
less file.txt
head -n 10 file.txt
tail -n 20 file.txt
tail -f logfile.log  # 实时查看日志

# 查找文件
find /path -name "*.txt"
find . -type f -size +10M
4.2 文本处理
代码语言:javascript
复制
# grep搜索
grep "pattern" file.txt
grep -r "pattern" directory/  # 递归搜索
grep -i "pattern" file.txt    # 忽略大小写
grep -v "pattern" file.txt    # 反向匹配

# sed流编辑器
sed 's/old/new/g' file.txt            # 替换
sed '/pattern/d' file.txt             # 删除匹配行
sed -n '10,20p' file.txt              # 打印10-20行

# awk文本分析
awk '{print $1}' file.txt             # 打印第一列
awk -F',' '{print $2}' file.csv       # 指定分隔符
awk '$3 > 100 {print $0}' data.txt    # 条件筛选
4.3 系统管理
代码语言:javascript
复制
# 进程管理
ps aux | grep process_name
top -u username
kill -9 PID
pkill process_name

# 磁盘空间
df -h
du -sh directory/
du -h --max-depth=1

# 系统信息
uname -a
cat /etc/os-release
free -h
uptime

# 用户管理
whoami
id username
last

五、实用脚本示例

5.1 备份脚本
代码语言:javascript
复制
#!/bin/bash
# 备份脚本
BACKUP_DIR="/backup"
SOURCE_DIR="/data"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="backup_$DATE.tar.gz"

echo "开始备份..."
tar -czf "$BACKUP_DIR/$BACKUP_FILE" "$SOURCE_DIR"

if [ $? -eq 0 ]; then
    echo "备份成功: $BACKUP_FILE"
    
    # 删除7天前的备份
    find $BACKUP_DIR -name "backup_*.tar.gz" -mtime +7 -delete
else
    echo "备份失败"
    exit 1
fi
5.2 日志监控脚本
代码语言:javascript
复制
#!/bin/bash
# 监控日志错误
LOG_FILE="/var/log/app.log"
ERROR_KEYWORDS=("ERROR" "CRITICAL" "FAILED")
ALERT_EMAIL="admin@example.com"

check_errors() {
    for keyword in "${ERROR_KEYWORDS[@]}"; do
        count=$(grep -c "$keyword" "$LOG_FILE")
        if [ $count -gt 0 ]; then
            echo "发现 $count 个 $keyword 错误" | mail -s "系统警报" "$ALERT_EMAIL"
            # 提取错误详情
            grep "$keyword" "$LOG_FILE" | tail -5 > /tmp/last_errors.txt
        fi
    done
}

# 定期检查
while true; do
    check_errors
    sleep 300  # 5分钟检查一次
done
5.3 批量文件处理
代码语言:javascript
复制
#!/bin/bash
# 批量重命名和转换
INPUT_DIR="./images"
OUTPUT_DIR="./converted"

mkdir -p "$OUTPUT_DIR"

for img in "$INPUT_DIR"/*.jpg; do
    if [ -f "$img" ]; then
        filename=$(basename "$img" .jpg)
        # 转换并调整大小
        convert "$img" -resize 800x600 "$OUTPUT_DIR/${filename}_resized.jpg"
        echo "已处理: $filename"
    fi
done

echo "批量处理完成"

六、脚本调试和优化

6.1 调试技巧
代码语言:javascript
复制
#!/bin/bash
# 调试选项
set -x   # 显示执行的命令
set -e   # 遇到错误立即退出
set -u   # 使用未定义变量时报错

# 或执行时启用
bash -x script.sh
6.2 错误处理
代码语言:javascript
复制
#!/bin/bash
# 错误处理示例
cleanup() {
    echo "清理临时文件..."
    rm -f /tmp/temp_*
    echo "脚本退出"
}

# 捕获退出信号
trap cleanup EXIT

# 函数错误处理
process_file() {
    local file=$1
    if [ ! -f "$file" ]; then
        echo "错误: 文件不存在 - $file" >&2
        return 1
    fi
    # 处理逻辑
}

# 主程序
main() {
    process_file "$1" || exit 1
    # 其他逻辑
}

七、最佳实践

添加文档头

代码语言:javascript
复制
#!/bin/bash
# 脚本名称: backup.sh
# 作者: Your Name
# 版本: 1.0
# 描述: 用于系统备份
# 用法: ./backup.sh [选项]

使用函数模块化

添加日志记录

参数验证

添加帮助功能

使用配置文件

定期维护和更新

八、学习资源推荐

  1. 官方文档: GNU Bash手册
  2. 在线教程:
    • Linux Shell Scripting Tutorial
    • Bash Academy
  3. 参考书籍:
    • 《Linux命令行与shell脚本编程大全》
    • 《Bash Cookbook》

通过掌握这些基础知识和常用命令,你可以编写出功能强大、稳定可靠的自动化批处理脚本,大大提高Linux系统管理效率。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux/Unix系统主流脚本语言–Bash语言
    • 一、Shell脚本基础
      • 1.1 Shell脚本基本结构
      • 1.2 创建和执行脚本
    • 二、Shell脚本核心语法
      • 2.1 变量
      • 2.2 输入输出
    • 三、流程控制
      • 3.1 条件判断
      • 3.2 循环结构
    • 四、常用命令
      • 4.1 文件和目录操作
      • 4.2 文本处理
      • 4.3 系统管理
    • 五、实用脚本示例
      • 5.1 备份脚本
      • 5.2 日志监控脚本
      • 5.3 批量文件处理
    • 六、脚本调试和优化
      • 6.1 调试技巧
      • 6.2 错误处理
    • 七、最佳实践
    • 八、学习资源推荐
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档