OpenEuler下Shell脚本编程入门与实践
1. OpenEuler Shell编程入门指南作为一款国产开源操作系统OpenEuler在服务器和云计算领域越来越受欢迎。今天我想分享一些在OpenEuler环境下进行Shell脚本编程的实用技巧这些都是我在实际工作中积累的经验。Shell脚本是Linux系统管理员的必备技能它能帮助我们自动化重复性工作提高运维效率。在OpenEuler系统中Bash是最常用的Shell解释器我们将基于它来展开讨论。提示如果你是Linux新手建议先掌握基本的命令行操作再学习Shell脚本这样会事半功倍。2. Shell脚本基础概念2.1 什么是Shell脚本Shell脚本本质上是一个包含一系列Shell命令的文本文件。当执行这个文件时系统会按顺序执行其中的命令。它就像是一个批处理程序可以自动完成复杂的系统管理任务。在OpenEuler中我们通常使用Bash作为默认的Shell解释器。你可以通过以下命令查看当前使用的Shellecho $SHELL2.2 创建第一个Shell脚本让我们创建一个简单的Hello World脚本使用文本编辑器创建一个新文件vim hello.sh输入以下内容#!/bin/bash # 这是我的第一个Shell脚本 echo Hello OpenEuler!保存文件后需要赋予执行权限chmod x hello.sh执行脚本./hello.sh注意脚本第一行的#!/bin/bash称为shebang它告诉系统使用哪个解释器来执行这个脚本。这在OpenEuler中尤为重要因为系统可能安装了多个Shell解释器。3. Shell脚本核心语法3.1 变量使用Shell中的变量不需要声明类型直接赋值即可nameOpenEuler version22.03使用变量时需要在变量名前加$符号echo 当前系统$name $version提示变量名区分大小写建议使用全大写字母表示常量小写字母表示普通变量。3.2 条件判断Shell脚本中使用if语句进行条件判断if [ $version -gt 20 ]; then echo 这是一个较新的OpenEuler版本 else echo 考虑升级到最新版本 fi常用比较运算符-eq等于-ne不等于-gt大于-lt小于-ge大于等于-le小于等于3.3 循环结构for循环示例for i in {1..5}; do echo 这是第$i次循环 donewhile循环示例count1 while [ $count -le 5 ]; do echo 计数$count ((count)) done4. OpenEuler特有功能4.1 系统信息获取OpenEuler提供了一些特有的命令来获取系统信息# 查看OpenEuler版本 cat /etc/os-release # 查看系统安装的软件包 dnf list installed4.2 软件包管理OpenEuler使用DNF作为包管理工具# 搜索软件包 dnf search package_name # 安装软件包 sudo dnf install package_name # 更新系统 sudo dnf update5. 实用脚本示例5.1 系统监控脚本这是一个简单的系统监控脚本#!/bin/bash # 获取CPU使用率 cpu_usage$(top -bn1 | grep Cpu(s) | sed s/.*, *\([0-9.]*\)%* id.*/\1/ | awk {print 100 - $1}) # 获取内存使用率 mem_usage$(free | grep Mem | awk {print $3/$2 * 100.0}) # 获取磁盘使用率 disk_usage$(df -h / | awk NR2 {print $5}) echo CPU使用率: $cpu_usage% echo 内存使用率: $mem_usage% echo 根分区使用率: $disk_usage5.2 批量文件处理这个脚本可以批量重命名当前目录下的.txt文件#!/bin/bash count1 for file in *.txt; do new_namedocument_${count}.txt mv $file $new_name echo 已重命名: $file - $new_name ((count)) done6. 调试技巧6.1 调试模式在脚本开头添加set -x可以开启调试模式#!/bin/bash set -x # 脚本内容...6.2 错误处理使用set -e可以让脚本在遇到错误时立即退出#!/bin/bash set -e # 脚本内容...6.3 日志记录建议在脚本中添加日志记录功能#!/bin/bash LOG_FILEscript.log log() { echo $(date %Y-%m-%d %H:%M:%S) - $1 | tee -a $LOG_FILE } log 脚本开始执行 # 脚本内容... log 脚本执行完成7. 安全注意事项在OpenEuler中编写Shell脚本时需要注意以下安全问题避免使用root权限执行不必要的操作对用户输入进行验证使用引号包裹变量防止空格导致的解析错误设置适当的文件权限例如处理用户输入时read -p 请输入文件名: filename # 验证输入 if [ ! -f $filename ]; then echo 错误文件不存在 2 exit 1 fi8. 性能优化建议减少子进程的创建尽量使用Shell内置命令而不是外部命令避免不必要的循环使用awk和sed处理文本比使用多个grep和cut更高效对大文件处理时考虑使用while read循环例如处理大日志文件# 不推荐 grep ERROR large.log | cut -d -f3 # 推荐 awk /ERROR/ {print $3} large.log9. 常见问题解决9.1 脚本执行权限问题如果遇到Permission denied错误chmod x script.sh ./script.sh9.2 行尾符问题在Windows编辑的脚本可能在Linux上报错需要转换行尾符dos2unix script.sh9.3 变量未定义使用未定义的变量可能导致意外行为可以使用set -u来防范#!/bin/bash set -u echo $undefined_var # 这会报错退出10. 进阶学习资源OpenEuler官方文档https://openeuler.org/Bash参考手册https://www.gnu.org/software/bash/manual/Shell脚本调试技巧https://wiki.bash-hackers.org/scripting/debuggingtips高级Bash脚本编程指南https://tldp.org/LDP/abs/html/最后分享一个实用技巧在OpenEuler中你可以使用shellcheck工具来检查脚本中的潜在问题sudo dnf install shellcheck shellcheck your_script.sh这个工具能帮助我们发现脚本中的常见错误和不良实践特别适合初学者使用。

相关新闻

AS3性能对决:传统显示列表与Starling GPU加速渲染深度对比

AS3性能对决:传统显示列表与Starling GPU加速渲染深度对比

如果你是一位 Flash 开发者,或者你的项目还在维护着一些“上古”的 ActionScript 3.0 代码,那么你一定被一个问题困扰过: 在同一个屏幕上,到底能流畅地跑多少个动画对象? 这个问题背后,其实是两种截然不…

2026/9/30 10:19:41 阅读更多 →
Python开发环境搭建指南:从安装到配置

Python开发环境搭建指南:从安装到配置

1. Python编程环境搭建概述 作为一门简单易学却功能强大的编程语言,Python近年来在各领域应用越来越广泛。无论是数据分析、Web开发还是自动化脚本,Python都能胜任。但对于初学者来说,第一步往往卡在环境搭建这个看似简单实则暗藏玄机的环节。…

2026/9/28 7:41:10 阅读更多 →
UE4离线手册:CHM格式文档的价值、局限与现代工作流替代方案

UE4离线手册:CHM格式文档的价值、局限与现代工作流替代方案

1. 项目概述:一份被“遗忘”的UE4离线学习宝典 如果你是一名虚幻引擎4(Unreal Engine 4, 简称UE4)的学习者或开发者,尤其是在网络环境不那么理想,或者习惯离线查阅资料、享受本地快速全文检索的“老派”程序…

2026/9/30 18:15:54 阅读更多 →

最新新闻

β-环糊精组合修饰全解析:PEG链连接FITC、Biotin、DBCO的设计与应用

β-环糊精组合修饰全解析:PEG链连接FITC、Biotin、DBCO的设计与应用

拿到“PEG-荧光素修饰β-环糊精,β-CD-PEG-FITC,β-CD-PEG-Biotin,DBCO-PEG修饰β-环糊精,β-CD-DBCO-PEG”这一串产品名时,多数人的第一反应是“这到底是个东西还是好几个东西”。其实这是一类典型的组合修饰型环糊精…

2026/10/1 18:57:55 阅读更多 →
C++工厂方法模式实战:从日志系统到调试排查全解

C++工厂方法模式实战:从日志系统到调试排查全解

聊到C里的创建型设计模式,工厂方法模式(Factory Method)是我在工程实践中用得最频繁,也最容易被低估的一个。早些年我在面试候选人的时候,几乎每次都会问到一个场景:一段代码里有七八个if分支去创建不同类型…

2026/10/1 18:57:55 阅读更多 →
Madeira 整合 Wine、FEX-Emu 与 DXMT:ARM 平台运行 x86-64 Windows 程序实战

Madeira 整合 Wine、FEX-Emu 与 DXMT:ARM 平台运行 x86-64 Windows 程序实战

1. 从“Madeira”这个名字说起:它到底想解决什么问题 第一次看到“Madeira”这个项目名,很多人会以为是某个葡萄酒产区的工具,或者干脆是个地名相关的应用。但结合热搜词里的 Wine、FEX-Emu、DXMT、x86-64 这几个关键词,方向就清晰…

2026/10/1 18:57:55 阅读更多 →
声音克隆 + 文本转语音:narrator-ai-cli-skill 独立任务实战,AI 解说大师配音两大技能

声音克隆 + 文本转语音:narrator-ai-cli-skill 独立任务实战,AI 解说大师配音两大技能

声音克隆 文本转语音:narrator-ai-cli-skill 独立任务实战,AI 解说大师配音两大技能 【免费下载链接】narrator-ai-cli-skill AI 解说大师 — Agent skill;封装 narrator-ai-cli 供 Claude/Codex 等工具调用 项目地址: https://gitcode.co…

2026/10/1 18:57:55 阅读更多 →
Windows英文系统中文显示异常的注册表级修复方案

Windows英文系统中文显示异常的注册表级修复方案

1. 问题本质与真实场景还原这个问题我从2015年就开始反复处理,不是什么新毛病,但每次Windows大版本更新(比如1809、20H2、22H2)它就准时回来“打卡”。核心现象非常典型:你把系统语言从中文改成英文(比如为…

2026/10/1 18:57:55 阅读更多 →
C++桥接模式四种实现:从指针到std::variant的工程实践

C++桥接模式四种实现:从指针到std::variant的工程实践

从"类和类纠缠"到"接口和实现各过各的"做C开发这么多年,我一直觉得设计模式这事儿最怕"背名字"。桥接模式(Bridge Pattern)就是个典型——很多人能把定义背出来:"将抽象部分与实现部分分离&am…

2026/10/1 18:56:55 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →