Linux基础之shell脚本
一、了解什么是shell脚本shell脚本的本质就是 shell命令的有序集合 它属于一种解释型语言不需要编译方便操作者对重复性的劳动进行编程同时shell脚本也是一种无类型语言其变量没有类型或字符串类型注意事项: 对标点符号 和 格式 非常严格 特别是空格二、创建一个shell脚本的步骤1. 创建一个普通文件通常后缀.shtouch hello.sh2. 修改权限 添加可执行权限chmod 777 hello.sh3. 写脚本vim hello.sh注任何一个脚本文件的第一行都必须写 #!/bin/bash4. 运行脚本 ./hello.sheg写一个创建脚本的 创建1.sh#!/bin/bash #创建名为1.sh的脚本文件 touch 1.sh #修改权限 chmod 777 1.sh #在终端打印hello world echo hello world三、shell脚本中的变量变量: 多用于代指文件名即各种名字或参数命令等1、用户自定义变量:变量定义 变量名值 等号两边 没有空格变量使用 引用其值 $变量名 本质是字符替换2、位置变量:$0 运行脚本的指令本身$1,$2,……$9 分别包含第一个到第九个命令行参数3、预定义变量: 有终端预先定义的一些变量由系统保留和维护的一组特殊的变量这些变量通常用于保存程序运行状态等$# 包含命令行参数的个数$ 包含所有命令行参数“$1,$2,……$9”$? 包含前一个命令的退出状态$* 包含所有命令行参数“$1,$2,……$9”$$ 包含正在执行进程的ID号4、环境变量: 一组存储终端环境参数的变量注export 命令可以打印输出 终端所有的环境变量PWD 存储当前工作路径USER 存储当前终端的登录用户HOME 存储当前用户的家目录PATH 存储当前终端 的命令搜索路径eg编写一个脚本文件来创建一个新的脚本#!/bin/bash #定义一个变量 #NAMEif.sh #定义位置变量 NAME$1 echo 正在创建$NAME文件 touch $NAME echo 正在配置文件 chmod 777 $NAME echo 正在写入第一行 echo #!/bin/bash $NAME echo $NAME文件创建成功结果展示四、shell脚本的 输入输出输入echo 输出字符串输出read 从终端读取字符串五、shell中 的算数运算expr 数学表达式注1、 每个符号与数值 间都要有空格分开2、shell脚本支持 - \* / % 但只能做整数运算不能做小数运算六、shell 表达式1、字符串测试s1 s2 测试两个字符串的内容是否完全一样s1 ! s2 测试两个字符串的内容是否有差异-z s1 测试s1 字符串的长度是否为0-n s1 测试s1 字符串的长度是否不为02、整数测试a -eq b 测试a 与b 是否相等a -ne b 测试a 与b 是否不相等a -gt b 测试a 是否大于ba -ge b 测试a 是否大于等于ba -lt b 测试a 是否小于ba -le b 测试a 是否小于等于b-d name 测试name 是否为一个目录-e name 测试一个文件是否存在-f name 测试name 是否为普通文件-L name 测试name 是否为符号链接-r name 测试name 文件是否存在且为可读-w name 测试name 文件是否存在且为可写-x name 测试name 文件是否存在且为可执行-s name 测试name 文件是否存在且其长度不为0f1 -nt f2 测试文件f1 是否比文件f2 更新f1 -ot f2 测试文件f1 是否比文件f2 更旧七、shell中的程序结构1、 if 结构if [ 表达式 ]then命令块1else命令块2fi注如果没有else 可以省略 则if结构可写为if [ 表达式 ]then命令块1fieg输入一个文件名判断该文件是否存在, 若存在则判断是否为普通文件且是空的若是则删除它#!/bin/bash #echo 请输入一个文件名 #read FILE FILE$1 if [ -z $FILE ] then echo UseAge:该脚本用于删除一个空的普通文件 echo 需要指定一个文件名参数 else echo 正在操作$FILE if [ -e $FILE ] then echo 文件存在 if [ -f $FILE ] then echo 是普通文件 if [ -s $FILE ] then echo 文件有内容 else echo 文件没有内容, 删除$FILE rm $FILE fi fi fi fi结果展示2、case 多分支结构case $变量名 in值1) 命令块1;;值2) 命令块2;;...*) 命令块nesac运行逻辑 将变量中字符串与括号左边的字符串比较相等就执行后面的命令块若不相等 继续向后比较注值可以使用通配符eg输入成绩判断输入的成绩的优良中差并输出#!/bin/bash echo 请输入你的成绩: read cj case $cj in 100) echo 满分优秀 ;; 9?) echo 成绩优秀 ;; 8?) echo 成绩良好 ;; [67]?) echo 成绩及格 ;; *) echo 成绩不及格 esac结果展示3、for循环结构1:for (( I0;I10;I ))do循环命令块doneeg: 创建10个文件 文件名为 file_数.txt#!/bin/bash for ((I0;I10;I)) do touch file_$I.txt done结果展示结构2:for 变量名 in 取值列表do循环命令块done注取值列表中是以空格、回车等分隔开的字符串每次循环变量的值就是取值列表中的一个 并且是顺序的eg: 打印输出当前目录中 所有.sh 文件都打印出来#!/bin/bash #file$1 for file in ls *.sh do echo $file done结果展示eg: 写一个脚本实现将当前目录中所有的、空的、普通文件删除#!/bin/bash for file in ls * do echo $file if [ -e $file ] then echo 文件存在 if [ -f $file ] then echo 普通文件 if [ -s $file ] then echo 有内容 else echo 没有内容删除$file rm $file fi fi fi done4、while循环while [ 条件表达式 ]do循环语句块done注shell中的while与C中的运行逻辑完全一样八、循环控制语句breakcontinue注shell中的循环控制语句与C中的break和continue关键字的效果完全一样九、了解shell 的函数1、 函数定义:函数名(){命令块}2、函数调用 函数名3、参数传递 使用位置变量eg在终端打印hello world并计算12的值#!/bin/bash func() { echo hello world return 0 } sum() { aexpr $1 $2 echo a$a return 0 } #调用函数func func #使用命令置换方式调用sum函数 #Asum 1 2 sum 1 2 #echo A$A结果展示

相关新闻

【DevExpress中文教程】在GridView中动态创建列时如何绑定不同编辑处理控件

【DevExpress中文教程】在GridView中动态创建列时如何绑定不同编辑处理控件

在使用DevExpress GridView时,为了方便往往使用一些扩展函数,动态创建GridView列的编辑控件对象,然后我们可以灵活的对内容进行编辑或者使用一些弹出的对话框窗体进行处理内容的录入,本文就是介绍这一主题:在DevExpres…

2026/9/14 21:53:08 阅读更多 →
2026年遮光缠绕膜定做厂家该怎么选

2026年遮光缠绕膜定做厂家该怎么选

随着工业包装对产品防护与仓储管理要求的不断提升,遮光缠绕膜作为一种兼具拉伸包装与光敏防护功能的材料,正逐步成为冷链物流、电子元件、化工原料等领域的“刚需”产品。当时间节点来到2026年,采购方在选择定做厂家时,已不再单纯…

2026/9/10 10:36:03 阅读更多 →
[1214]基于Python实现视频去重

[1214]基于Python实现视频去重

文章目录videohash2🛠️ 安装🎬 基本用法🤝 比较视频:如何判断相似📚 进阶用法⚠️ 使用限制💡 与另一个分支的区别基于Python实现视频去重基本原理实现方法其它视频去重codevideohash2 https://github.com…

2026/9/5 23:12:29 阅读更多 →

最新新闻

大模型、智能体、MCP、Skill:AI协同工作原理深度解析

大模型、智能体、MCP、Skill:AI协同工作原理深度解析

本文以Claude Code为例,通过架构图解析了AI大模型(LLM)、智能体(Agent)、模型上下文协议(MCP)和技能规范(Skill)之间的关系及协同工作方式。LLM负责理解和生成文本&#…

2026/9/14 21:55:19 阅读更多 →
芯片烧毁诊断与修复:硬件工程师实战指南

芯片烧毁诊断与修复:硬件工程师实战指南

1. 从焦糊的芯片说起:电子元件损坏的深度诊断与修复指南那天下午,实验室里飘来一阵熟悉的焦糊味——又一块电路板宣告阵亡。作为从业十年的硬件工程师,这种气味早已成为工作日常的一部分。但每次遇到烧毁的芯片,依然会让我停下手中…

2026/9/14 21:55:19 阅读更多 →
医学背景转AI+医疗:零代码入门大模型,收藏这份高薪转型路线图

医学背景转AI+医疗:零代码入门大模型,收藏这份高薪转型路线图

本文分享一位医学专业背景者成功转型AI医疗领域的心路历程与学习路径。作者通过明确职业方向,逐步掌握大模型、RAG、Agent等AI技术,并结合自身医学专业知识,最终成功获得迈瑞相关岗位高薪offer。文章强调,非计算机背景者转型AI无需…

2026/9/14 21:55:19 阅读更多 →
小白程序员必看:收藏这份Agent学习路线,轻松玩转大模型AI工具!

小白程序员必看:收藏这份Agent学习路线,轻松玩转大模型AI工具!

本文系统梳理了Agent学习路线,从大模型基础与对话调用,到工具调用与结构化输出,再到RAG检索增强生成、Agent设计模式、记忆机制和工程化兜底,帮助读者全面掌握Agent开发的核心组件和流程。文章还推荐了LangGraph 101、Langchain-C…

2026/9/14 21:55:19 阅读更多 →
2026知识库平台选型实战指南:AI原生能力与业务耦合深度解析

2026知识库平台选型实战指南:AI原生能力与业务耦合深度解析

1. 项目概述:为什么2026年知识库平台选型突然变得如此关键2026年,知识库平台已不再是IT部门的“可选项”,而是企业运营的“基础设施级刚需”。我过去三年深度参与过17家不同规模企业的知识管理升级项目,从50人初创团队到8000人集团…

2026/9/14 21:55:19 阅读更多 →
ESP32-PICO-D4微型无人机地面站设计实战

ESP32-PICO-D4微型无人机地面站设计实战

1. 这不是概念机,是能飞能控的真火柴盒地面站你见过比火柴盒还小的无人机地面站吗?不是玩具,不是demo,是真正能连上飞行控制器、解码MAVLink协议、实时显示姿态数据、发送航点指令、甚至支持OTA升级固件的完整地面站系统。核心就一…

2026/9/14 21:54:18 阅读更多 →

日新闻

AI音乐侵权案中的测试工程与版权保护技术

AI音乐侵权案中的测试工程与版权保护技术

1. 项目概述:当测试工程师遇上AI音乐侵权案去年夏天,我作为技术顾问参与了一起特殊的著作权纠纷案——某音乐平台AI作曲功能被指控批量侵权。这起案件的特殊性在于:原告方并非传统音乐人,而是一家拥有百万级曲库的数字音乐发行商&…

2026/9/14 0:00:26 阅读更多 →
嵌入式面试I2C与SPI深度解析:从协议到量产调试

嵌入式面试I2C与SPI深度解析:从协议到量产调试

1. 这份“高频知识点洞察”到底是什么,又为什么值得你花时间细读? 如果你最近在刷嵌入式开发岗位的招聘JD,或者正坐在工位上改第7版简历,又或者刚被面试官一句“讲讲I2C和SPI的区别”问得手心冒汗——那你不是一个人。过去两年我带…

2026/9/14 0:00:26 阅读更多 →
51单片机开环控制磁阻传感器的硬件匹配与代码实现

51单片机开环控制磁阻传感器的硬件匹配与代码实现

简介:本资源是一份面向嵌入式初学者与单片机课程实践者的51单片机开关磁阻电机(SRM)开环控制教学方案,聚焦磁阻位置检测、固定时序驱动与基础状态可视化。资源包含1个C语言主程序文件(zhuang600.c)实现电机…

2026/9/14 0:00:26 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/14 5:45:49 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/14 0:52:26 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/14 0:06:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/14 17:35:10 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/14 16:59:29 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/14 5:45:14 阅读更多 →