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 "{""…...
PySide6商业项目避坑指南:从许可证验证到Qt Designer实战
PySide6商业项目避坑指南:从许可证合规到UI开发实战 当企业开发者选择PySide6作为桌面应用开发框架时,往往会被其商业友好的LGPL许可证所吸引。但真正落地到项目开发中,从法律合规到技术实现都存在诸多需要特别注意的细节。本文将深入剖析那些…...
如何高效迁移至WeFriends:微信好友关系管理工具全新升级指南
如何高效迁移至WeFriends:微信好友关系管理工具全新升级指南 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFrien…...
这份榜单够用!高效论文写作全流程AI论文软件推荐(2026 最新)
2026年AI论文软件持续升级,论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节,以下工具按环节精准匹配,兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求,覆盖…...
DoL-Lyra构建系统:5分钟学会自动化游戏MOD打包
DoL-Lyra构建系统:5分钟学会自动化游戏MOD打包 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS DOL-CHS-MODS(Degrees of Lewdity汉化美化整合包)是一款专为Degree…...
Linux内核构建系统:Makefile、Kconfig与.config解析
1. Linux内核构建系统核心组件解析1.1 内核构建系统概述Linux内核作为复杂的开源项目,其构建系统由三个关键组件构成:Makefile、Kconfig和.config文件。这三个组件协同工作,构成了内核模块化构建的基础架构。1.1.1 组件类比关系Kconfig&#…...
告别迷茫!Java程序员入门AI的完整学习地图
文章目录前言一、先破三个心魔:Java搞AI到底靠不靠谱?心魔一:AI都是Python的天下,Java只能看戏?心魔二:必须得回炉重造学数学?心魔三:要从Hello World开始学Python?二、J…...
vLLM-v0.17.1实操手册:vLLM服务升级策略与滚动更新最佳实践
vLLM-v0.17.1实操手册:vLLM服务升级策略与滚动更新最佳实践 1. vLLM框架概述 vLLM是一个专为大型语言模型(LLM)设计的高性能推理和服务库,最新发布的v0.17.1版本带来了多项性能优化和功能增强。这个开源项目最初由加州大学伯克利分校的研究团队开发&am…...
【FreeRTOS实战入门】一、从CubeMX到第一个任务:手把手搭建FreeRTOS工程
1. 为什么选择FreeRTOS与CubeMX组合 第一次接触嵌入式实时操作系统时,很多人会纠结选择哪种RTOS。我当年在uC/OS-II和FreeRTOS之间犹豫了很久,最终选择了后者。原因很简单:FreeRTOS不仅完全免费开源,还有STM32CubeMX这个神器加持。…...
Java初学者项目需要哪些技术?
对于Java初学者,以下技术栈组合既能满足学习需求,又能完成完整项目开发:核心基础Java语法基础掌握变量、循环、条件语句面向对象三大特性:封装、继承、多态集合框架:$ArrayList$、$HashMap$等异常处理机制开发工具IDE&…...
南北阁 4.1-3B 开源镜像实战:Streamlit轻量化UI+CoT折叠展示一文详解
南北阁 4.1-3B 开源镜像实战:Streamlit轻量化UICoT折叠展示一文详解 想快速体验一个能在本地流畅运行、还能“看见”模型思考过程的智能对话工具吗?今天要介绍的,就是基于南北阁(Nanbeige)4.1-3B模型打造的轻量化流式…...
