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/8/6 17:41:35 阅读更多 →
2026年遮光缠绕膜定做厂家该怎么选

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

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

2026/8/6 17:40:34 阅读更多 →
[1214]基于Python实现视频去重

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

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

2026/8/6 17:40:34 阅读更多 →

最新新闻

Aura2/Aura vs Lightning Web Components:终极对比分析,哪个更适合你的项目?

Aura2/Aura vs Lightning Web Components:终极对比分析,哪个更适合你的项目?

Aura2/Aura vs Lightning Web Components:终极对比分析,哪个更适合你的项目? 【免费下载链接】aura This project is archived, please see the readme for additional resources. 项目地址: https://gitcode.com/gh_mirrors/aura2/aura …

2026/8/7 20:14:31 阅读更多 →
ChromePass终极指南:3个步骤轻松提取Chrome浏览器所有保存密码

ChromePass终极指南:3个步骤轻松提取Chrome浏览器所有保存密码

ChromePass终极指南:3个步骤轻松提取Chrome浏览器所有保存密码 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass ChromePass是一个功能强大的开源Python工具&#xff…

2026/8/7 20:14:31 阅读更多 →
IntelliQ后端架构深度剖析:从LLM集成到意图处理的完整流程

IntelliQ后端架构深度剖析:从LLM集成到意图处理的完整流程

IntelliQ后端架构深度剖析:从LLM集成到意图处理的完整流程 【免费下载链接】IntelliQ Advanced Multi-Turn QA System with LLM and Intent Recognition. 基于LLM大语言模型意图识别、参数抽取结合slot词槽技术实现多轮问答、NL2API. 打造Function Call多轮问答最佳…

2026/8/7 20:14:31 阅读更多 →
数据中心PDU插头选型指南:C13、C19与国标接口详解与避坑

数据中心PDU插头选型指南:C13、C19与国标接口详解与避坑

1. 从一次深夜告警说起:为什么PDU插头选型不是小事 凌晨两点,机房环境监控系统突然弹出一条告警:“A03机柜温升异常,超过阈值5℃”。运维团队紧急排查,发现根源并非空调故障,而是机柜内一台新上架的存储服务…

2026/8/7 20:14:31 阅读更多 →
钉钉上线智能语音输入:说完即定稿,口语直接变工作语言

钉钉上线智能语音输入:说完即定稿,口语直接变工作语言

近日,钉钉新版本上线智能语音输入功能,成为首个支持全场景 AI 语音输入的协同办公平台。不近日,钉钉新版本上线智能语音输入功能,成为首个支持全场景 AI 语音输入的协同办公平台。不同于传统语音转文字,钉钉在语音识别…

2026/8/7 20:14:31 阅读更多 →
Android-ActionItemBadge核心组件解析:BadgeStyle如何打造专属徽章样式

Android-ActionItemBadge核心组件解析:BadgeStyle如何打造专属徽章样式

Android-ActionItemBadge核心组件解析:BadgeStyle如何打造专属徽章样式 【免费下载链接】Android-ActionItemBadge This library offers a simple method to add a small badge icon to your ActionBar-MenuItem 项目地址: https://gitcode.com/gh_mirrors/an/And…

2026/8/7 20:13:31 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/7 17:02:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/7 17:02:36 阅读更多 →