欢迎光临
我们一直在努力

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

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

在这里插入图片描述

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

一、Shell脚本基础

1.1 Shell脚本基本结构

#!/bin/bash
# 这是一个注释
# 脚本说明:自动化批处理脚本示例

# 脚本主体代码
echo "Hello, World!"

1.2 创建和执行脚本

# 创建脚本文件
touch myscript.sh

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

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

二、Shell脚本核心语法

2.1 变量

#!/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 输入输出

#!/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 条件判断

#!/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 循环结构

#!/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 文件和目录操作

# 创建目录
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 文本处理

# 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 系统管理

# 进程管理
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 备份脚本

#!/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 日志监控脚本

#!/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 批量文件处理

#!/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 800×600 "$OUTPUT_DIR/${filename}_resized.jpg"
echo "已处理: $filename"
fi
done

echo "批量处理完成"

六、脚本调试和优化

6.1 调试技巧

#!/bin/bash
# 调试选项
set -x # 显示执行的命令
set -e # 遇到错误立即退出
set -u # 使用未定义变量时报错

# 或执行时启用
bash -x script.sh

6.2 错误处理

#!/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
# 其他逻辑
}

七、最佳实践

  • 添加文档头

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

  • 使用函数模块化

  • 添加日志记录

  • 参数验证

  • 添加帮助功能

  • 使用配置文件

  • 定期维护和更新

  • 八、学习资源推荐

  • 官方文档: GNU Bash手册
  • 在线教程:
    • Linux Shell Scripting Tutorial
    • Bash Academy
  • 参考书籍:
    • 《Linux命令行与shell脚本编程大全》
    • 《Bash Cookbook》
  • 通过掌握这些基础知识和常用命令,你可以编写出功能强大、稳定可靠的自动化批处理脚本,大大提高Linux系统管理效率。

    赞(0)
    未经允许不得转载:171主机测评 » Linux/Unix系统主流脚本语言--Bash语言
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址