Linux基础之shell脚本

发布时间:2026/9/27 12:14:44

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中动态创建列时如何绑定不同编辑处理控件

2026/8/29 1:52:53

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

Kendo UI for jQuery,一个现代的jQuery UI组件!

Kendo UI for jQuery,一个现代的jQuery UI组件!

2026/9/24 20:17:31

Kendo UI for jQuery是什么?Kendo UI for jQuery是完整的jQuery UI组件库,可快速构建出色的高性能响应式Web应用程序。Kendo UI for jQuery提供在短时间内构建现代Web应用程序所需要的工具,从多个UI组件中选择,并轻松地将它们组合…

佳能g1800 g1810 g2800 g2810 g3800 g3810 g4800 g4810清零软件5b00,5b02,5b04,1700,1702,1704,p07,e08亲测完美维修。

佳能g1800 g1810 g2800 g2810 g3800 g3810 g4800 g4810清零软件5b00,5b02,5b04,1700,1702,1704,p07,e08亲测完美维修。

2026/8/29 21:41:29

极速下载:点这里下载 密码:00 百度云:点这里下载 备用:pan.baidu.com/s/1gls2G4rqWWP-Mw-z6tVjnQ?pwd0000 常见型号如下: G1000、G1100、G1200、G1400、G1500、G1800、G1900、G1010、G1110、G1120、G1410、G1420、G1411、G1…

CANN/GE ACL数据集缓冲区添加函数

CANN/GE ACL数据集缓冲区添加函数

2026/9/26 19:14:12

aclmdlAddDatasetBuffer 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

用ffmpeg高效批量调整图片尺寸的实战指南

用ffmpeg高效批量调整图片尺寸的实战指南

2026/9/27 1:30:29

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

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱

2026/9/27 1:30:37

Transformers 音频特征提取工具库 audio_utils 全解析:从 Mel 刻度换算到对数 Mel 频谱 【免费下载链接】transformers 🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and mu…

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南

2026/9/27 1:30:35

RustFS 多节点集群重启与滚动升级实战:Readiness、Quorum 与 Degraded 模式完全指南 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system sup…

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

Java Integer缓存揭秘:128陷阱原理、避坑与面试全解

2026/9/27 1:30:34

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

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据

2026/9/26 16:36:51

RustFS Scanner 数据用量发布权威性决策:配额准入如何获得可用的权威依据 【免费下载链接】rustfs 🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting mi…

远程协作的工作台整理

远程协作的工作台整理

2026/9/26 14:29:04

远程协作的工作台整理远程协作的核心不是再加一个工具,而是让交接信息足够完整。异步任务要写明目标、输入位置、完成标准和需要决策的人。 工作台的最小配置 将日程、待办、代码和沟通入口收拢到少数固定位置;通知按紧急程度分层。工作台不需要模仿办公…

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

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

2026/9/26 13:57:22

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

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

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

2026/9/26 23:35:16

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