Linux Shell 脚本编程极简入门指南
一、学习前提准备
✅ 环境要求:
-
Linux系统(Ubuntu/CentOS等)或 WSL (Windows用户)
-
任意文本编辑器(推荐VSCode/Vim)
-
基础命令行操作能力
🔍 验证环境:
# 查看系统默认Shell
echo $SHELL
# 查看Bash版本
bash --version
二、Shell脚本基础认知
2.1 什么是Shell脚本?
-
解释型语言:通过
/bin/bash逐行解析执行 -
核心价值:
-
自动化重复性系统操作(80%运维工作可脚本化)
-
快速实现任务调度(结合cron)
-
提升操作可重复性和精确度
-
2.2 脚本文件标准结构
#!/bin/bash # Shebang声明(必须第1行)
# 文件:demo.sh # 脚本描述
# 作者:CSDN用户 # 维护信息
echo "欢迎学习Shell编程" # 可执行语句
三、首个Shell脚本实战
3.1 创建并运行脚本
# 创建脚本文件(建议.sh后缀)
touch hello_world.sh
chmod +x hello_world.sh # 添加执行权限
3.2 编辑器输入以下代码
#!/bin/bash
# 第一个Shell程序
echo "当前用户:$(whoami)"
echo "系统时间:$(date +%F)"
3.3 三种执行方式对比
| 执行方式 | 命令示例 | 适用场景 |
|---|---|---|
| 路径直接执行 | ./hello_world.sh | 已添加执行权限时 |
| 指定解释器执行 | bash hello_world.sh | 调试快速执行 |
| source命令执行 | source hello_world.sh | 需保留环境变量时 |
四、核心编程语法精要
4.1 变量操作
company="CSDN社区" # 定义变量(等号无空格)
readonly version="1.0" # 只读变量(不可修改)
today=$(date +%Y-%m-%d) # 命令执行结果赋值
echo "${company} ${today}" # 建议变量用花括号包裹
4.2 条件分支结构
if [ -f "/etc/passwd" ]; then # 判断文件存在echo "系统密码文件存在"
elif [ -d "/tmp" ]; then # 判断目录存在echo "/tmp目录存在"
elseecho "条件未满足"
fi
4.3 循环结构
for循环处理文件列表:
for file in *.log; doecho "正在处理日志文件:${file}"
done
while按行读取文件:
while read line; doecho "当前行:$line"
done < input.txt
4.4 函数定义与调用
# 带返回值函数
file_exists() {[ -f "$1" ] && return 0 || return 1
}
# 调用函数
file_exists /etc/hosts
if [ $? -eq 0 ]; then # $?获取上一条命令返回值echo "文件存在"
fi
五、实用功能模块速查
5.1 参数传递处理
| 特殊变量 | 含义 | 示例 |
|---|---|---|
$0 | 脚本名称 | echo "脚本:$0" |
$1-$9 | 第1-9个位置参数 | echo "第1参数:$1" |
$# | 参数总个数 | if [ $# -gt 0 ] |
$@ | 所有参数列表 | for param in $@ |
5.2 退出状态码
check_service() {systemctl is-active nginx >/dev/nullreturn $? # 返回上条命令的退出状态
}
check_service
case $? in0) echo "服务运行中";;*) echo "服务异常,状态码:$?";;
esac
5.3 管道与重定向
# 管道组合命令
cat access.log | grep "404" | awk '{print $7}'
# 输出重定向
ls -l > file_list.txt # 覆盖写入
echo "新增内容" >> log.txt # 追加写入
# 错误输出处理
apt update 2> /dev/null # 丢弃错误输出
六、自动化实战:系统备份脚本
6.1 需求说明
-
每日凌晨压缩备份
/data目录 -
自动删除30天前的备份文件
-
记录操作日志
6.2 完整代码实现
#!/bin/bash
# 自动化备份脚本
# 配置参数
backup_dir="/data"
dest_path="/backup"
keep_days=30
log_file="/var/log/backup.log"
# 目录检查
[ ! -d "$dest_path" ] && mkdir -p "$dest_path"
[ ! -f "$log_file" ] && touch "$log_file"
# 生成压缩包
timestamp=$(date +%Y%m%d%H%M)
tar -czf "${dest_path}/backup_${timestamp}.tar.gz" "$backup_dir" 2>&1 | tee -a "$log_file"
# 清理旧备份
find "$dest_path" -name "*.tar.gz" -mtime +$keep_days -delete 2>&1 | tee -a "$log_file"
# 日志记录
echo "[$(date)] 备份完成,保留最近${keep_days}天文件" | tee -a "$log_file"
6.3 部署到cron计划任务
# 每日凌晨2点执行
crontab -e
# 添加如下行
0 2 * * * /opt/scripts/backup.sh
七、高阶调试技巧
7.1 执行过程追踪
bash -x script.sh # 显示每条执行命令
7.2 代码段调试
set -x # 开启调试模式
# 需要调试的代码
set +x # 关闭调试模式
7.3 错误自动退出
#!/bin/bash
set -e # 任何语句返回值非0则立即退出
set -o pipefail # 管道命令出错时也退出
八、学习路线与资源推荐
🔥 技能提升路线:
-
掌握正则表达式(grep/sed)
-
学习awk高级文本处理
-
理解Linux信号处理(trap)
-
研究Ansible等自动化工具
📚 推荐资料:
-
书籍:《Linux命令行与Shell脚本编程大全》
-
工具:ShellCheck在线检测
相关文章:
Linux Shell 脚本编程极简入门指南
一、学习前提准备 ✅ 环境要求: Linux系统(Ubuntu/CentOS等)或 WSL (Windows用户) 任意文本编辑器(推荐VSCode/Vim) 基础命令行操作能力 🔍 验证环境: # 查看系统默认Shell echo $SHELL #…...
【医院管理会计专题】7.解锁本量利分析:医院医疗服务决策的智慧密码
医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 一、引言 在当今医疗行业竞争日益激烈的背景下,医院管理面临着诸多挑战,如何实现高效运营、提升服务质量并控制成本成为关键问题。管理会计作为一种重要的管理工具,在医院管理中发挥着越来越重要的作用。本…...
Kotlin和Java区别
哈哈哈,前段时间,面试的时候,突然问到我Kotlin和Java的区别,一下子把我问懵逼了,确实没遇到问这个的,想了下,说了下Kotlin的编译时空检查机制,代码更简洁,很多封装好的AP…...
Taro 面试题
基础概念 1. Taro 是什么?它的核心特点有哪些? Taro 是京东开源的 多端统一开发框架,基于 React 语法,可编译到 微信小程序、H5、React Native 等多个端。 核心特点: 多端适配:一套代码运行多个端支持 …...
Java部署在window启动报unable tocreate tempdir
在Windows系统中,Java应用在运行时会试图在默认的临时目录中创建文件。该临时目录通常由系统环境变量TEMP或TMP指定。如果这些变量设置不正确、指向一个无效的路径,或者操作系统的权限不足,就会导致“Unable to create tempdir”错误。 解决…...
基于deepseek和开放题库,构建专业大模型微调在线答题系统
为什么要进行大模型微调 大模型微调是将预训练模型适配到特定任务或领域的关键技术,正常情况下大模型通过海量通用数据训练获得广泛知识,但其参数和表征空间面向通用场景,难以直接适配垂直领域或复杂任务。例如在通用医疗问答模型在具体病症诊…...
ios 小组件和数据共享
创建主工程就不必讲了 1 创建小组件 创建子工程 [new Target ] 选择 [ Widger Extension] 小组件入口是WidgetBundle文件,可以进行多个小组件的调试 TestWidget2文件是主要操作,小组件使用swiftUI布局,使用 AppIntent进行事件处理ÿ…...
LVTTL(Low Voltage Transistor-Transistor Logic)电平详解
一、LVTTL电平的定义与核心特性 LVTTL(低压晶体管-晶体管逻辑)是传统TTL(5V)的低电压版本,工作电压通常为3.3V,旨在降低功耗并适配现代低电压集成电路,同时保持与TTL的逻辑兼容性。其核心特点如…...
element tree树形结构默认展开全部
背景: el-tree树形结构,默认展开全部,使用属性default-expand-all【是否默认展开所有节点】;默认展开一级,设置default-expanded-keys【默认展开的节点的 key 的数组】属性值为数组。 因为我这里的数据第一级是四川【省…...
统计登录系统10秒内连续登录失败超过3次的用户
为防止暴力破解用户账号的行为,在输入账号和密码时一般都会限制用户尝试密码输出错误的次数,如果用户多次输错密码后,将在一段时间内锁定账号,常见的有银行类APP、个税App等应用,如下是用户账号密码输入错误的提示图&a…...
音视频软件工程师面试题
一、基础知识 编解码相关 H.264 和 H.265(HEVC)的主要区别是什么?视频编解码的基本流程是什么?关键技术有哪些?音频编解码(如 AAC、MP3、Opus)的区别和应用场景?什么是 B 帧、P 帧、I 帧?它们的作用是什么? 流媒体协议RTMP、HTTP-FLV、HLS、WebRTC 的区别和应用场景…...
架构师面试(十四):注册中心设计
问题 大家或多或少都接触过【注册中心】,对注册中心的基本功能,如:服务注册、服务发现、健康检查和变更通知 ,肯定是耳熟能详的;那么大家对注册中心的架构设计是否了解呢? 如果让你负责设计一个分布式的注…...
ctf-web: php原生类利用 -- GHCTF Popppppp
源代码 <?php error_reporting(0); class CherryBlossom { public $fruit1; public $fruit2; public function __construct($a) {$this->fruit1 $a; } function __destruct() { echo $this->fruit1; } public function __toString() { $newFunc …...
「Unity3D」UGUI将元素固定在,距离屏幕边缘的某个比例,以及保持元素自身比例
在不同分辨率的屏幕下,UI元素按照自身像素大小,会发生位置与比例的变化,本文仅利用锚点(Anchors)使用,来实现UI元素,固定在某个比例距离的屏幕边缘。 首先,将元素的锚点设置为中心&…...
nextjs15简要介绍以及配置eslint和prettier
目录 一、Next.js 何时使用服务器端渲染(SSR)?何时使用静态生成(SSG)? 1、服务器端渲染(SSR - getServerSideProps) 2、 静态生成(SSG - getStaticProps) …...
存储过程和自定义函数在银行信贷业务中的应用(oracle)
数据校验和清洗 例如,检查客户的年龄是否在合理范围内,贷款金额是否符合规定的上下限等。 对于不符合规则的数据,可以进行清洗和修正。比如,将空值替换为默认值,或者对错误的数据进行纠正。 CREATE OR REPLACE PROC…...
基于Ollama平台部署的Qwen大模型实现聊天机器人
文章目录 基于Ollama平台部署的Qwen大模型实现聊天机器人1 概述2 技术栈2.1 开发技术2.2 环境 3 技术架构4 实现步骤4.1 环境搭建4.1.1 WSL配置及Ubuntu安装4.1.2 Ollama安装及模型部署 4.2 模块安装4.2.1 安装Streamlit 1.42.24.2.2 安装requests 2.32.34.2.3 安装ollama 0.4.…...
在 JDK 1.8 的 ConcurrentHashMap 中,为什么存在两种插入方式?
在 JDK 1.8 的 ConcurrentHashMap 中,之所以对“容器为空”和“计算位置为空”采取不同的处理方式,主要是因为 并发场景下的性能优化和并发安全保证。我们可以分开来看这两种情况: 1. 容器为空时,使用 volatile CAS 初始化 原因…...
如何让powershell的界面变成全屏显示?
刚打开powershell,原来的样子: 全屏:可以按一下键盘上的alt enter 键,效果:...
语音识别踩坑记录
本来想在原来的语音识别的基础上增加本地扩展本地词典, 采用的语音识别是Vosk识别器,模型是 vosk-model-small-cn-0.22 // 初始化Vosk识别器 if (recognizer null) {using (Model model new Model(modelPath)){string grammar "{""…...
Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
