shell脚本基础
目录
前言
一、概述
(一)、shell脚本基础概念
(二)、shell的类型
二、Shell变量
(一)、组成
1.变量名
2.变量值
(二)、类型
1.系统内置变量(环境变量)
2.自定义变量
3.预定义变量
4.位置变量
5.作用域
6.shell中的字符串
三、运算符
(一)、数学运算
(二)、比较运算
1.逻辑运算符
2.条件测试
3.字符串比较
4.数值比较
5.文件比较
四、shell脚本
(一)、shell脚本编写规范
(二)、shell运行规则
(三)、shell脚本运行追踪
总结
前言
shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell属于内置的脚本,程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理)语法简单,代码写起来比较轻松,简单易学。
一、概述
(一)、shell脚本基础概念
脚本就是将手动一次性执行的命令进行规范且自动化
(二)、shell的类型
shell 命令解释环境
类型有
sh
ash
bsh
csh
bash
tcsh
dsh
zsh
在Linux系统中
文件名.sh .sh是linux下bash shell 的默认后缀
查看系统中支持的shell
cat /etc/shells
查看系统默认shell
echo $SHELL

二、Shell变量
(一)、组成
1.变量名
不会变化
声明规范
不能是数字或数字开头
以_或字母开头
变量名中不能包含特殊字符

声明方法
驼峰式 userName
双驼峰 UserName
shell写法
user_name
username
USERNAME
2.变量值
不断变化
数字、字符
(二)、类型
1.系统内置变量(环境变量)
这种变量中主要保存的是和系统操作环境相关的数据,一般对系统起作用的环境变量的变量名是系统预先设定好的。
env可在/etc/profile文件中修改

查看环境变量
echo $PATH
显示当前环境变量的值
echo $LANG

表示系统的默认语言环境为美式英语(English, United States)并使用UTF-8编码
查看当前的区域设置
locale


查看远程连接
echo $SSH_CONNECTION

2.自定义变量
这种变量是最常见的变量,由用户自由定义变量名和变量的值。
varName=varValue
等号两边不能有空格
字符串
shell中可以不使用引号
当包含有空格时,需要使用引号
引号的用法
| 不会引用变量值 | 单引号 ' |
| 会应用变量值 | 双引号 " |
| 引用命令结果 | 反撇号 ` |
| $(命令) | 应用场景较多 |
3.预定义变量
是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
| $0 | 脚本本身的名称 |
| $# | 脚本后参数的个数 |
| $* | 脚本运行时参数的内容(整体输出) |
| $@ | 脚本运行时参数的内容(逐个输出) |
| $? | 脚本运行完毕后的返回值 |
| 默认情况大 | 0 成功 |
| 非0 失败 |




一般情况下失败为1,特殊的失败
4.位置变量
这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
脚本后参数所在的位置
$1
...
$9
5.作用域
输出 echo $varName
默认变量只在当前shell下生效
若要在当前及其子shell下生效,需要声明为全局变量(export)

6.shell中的字符串
string
1)获得字符串的长度
语法: ${#StringName}

2)字符串取子串
语法: ${#StringName:position:lenght}
注意:lenght没有定义时,一直取到字符串的结尾!

3)字符串的截取
a.从左至右截取最后一个匹配字符串string之后的所有字符串
语法: ${StringName##*string}
b.从左至右截取第一个匹配字符串string之后的所有字符串
语法: ${StringName#*string}
c.从右至左截取最后一个匹配字符串string之后的所有字符串
语法: ${StringName%%string*}
d.从右至左截取第一个匹配字符串string之后的所有字符串
语法: ${StringName%string*}

4)字符串的拼接
语法: StringName3=${StingName1}${StringName2}

5)字符串替换:
语法: ${StringName/OldString/NewString}

三、运算符
(一)、数学运算
| + - * / % | * 作为乘号时需要加转义符为\* |
| 运算方法 | |
| expr | expr $a + $b |
| $((a+b)) | echo $((a+b)) |
| $[a+b] | echo $[a+b] |
| 注意 | shell不支持浮点数的显示 |
| \r | 回车符 |
| \d | 垂直制表符 |
| \v | 水平制表符 |


(二)、比较运算
1.数值比较
| -eq | 等于 |
| -ne | 不等于 |
| -lt | 小于 |
| -le | 小于等于 |
| -gt | 大于 |
| -ge | 大于等于 |
用test测试

2.文件比较
| -e | 文件或目录是否存在 |
| -f | 是否为文件 |
| -d | 是否为目录 |
| -r | 判断文件是否可读 |
| -w | 判断文件是否可写 |
| -x | 判断文件是否可执行 |


3.字符串比较
| = | 字符串一致 |
| != | 字符串不一致 |
| -z | 字符串为空 |
| ! -z | 字符串不为空 |

4.逻辑运算符
| && | 并且,有假则假,全真为真 | |
| || | 或者,有真则真,全假为假 | |
| ! | 取反 | 有真则假,有假则真 |


5.条件测试
| && | [ $a -ne $b ] && echo OK | 条件 && 输出结果 |
| 条件为真输出 | ||
| || | [ $a -ne $b ] || echo OK | 条件 || 输出结果 |
| 条件为假输出 |
四、shell脚本
(一)、shell脚本编写规范
| 第一行 | #!/bin/bash |
| 第二行 | #脚本的说明 |
| 第三行 | 脚本正文 |
(二)、shell运行规则
| 没有x权限 | bash 脚本所在路径/脚本文件 |
| source 脚本所在路径/脚本文件 | |
| .(点)脚本所在路径/脚本文件 | |
| 有x权限 | .(点)/脚本文件 |
| 脚本绝对路径/脚本文件 |


不打断会一直查看
(三)、shell脚本运行追踪
shell脚本运行追踪bash -x 脚本所在路径/脚本文件
$[$RANDOM%100]返回100内随机数
seq 1 10返回1到10 的连续数字
{1..10}返回1到10 的连续数字
seq 1.1 10.1返回1.1 2.1 3.1.... 10.1


read -p "提示语" 变量名读取键盘输入并赋值给变量名



总结
今天的任务量有些重,但知识点是看懂和编辑Shell脚本的基础,需要花费时间进行反复背记,加油吧!
相关文章:
shell脚本基础
目录 前言 一、概述 (一)、shell脚本基础概念 (二)、shell的类型 二、Shell变量 (一)、组成 1.变量名 2.变量值 (二)、类型 1.系统内置变量(环境变量) 2.自定…...
创建maven的Springboot项目出现错误:Cannot access alimaven
创建maven的Springboot项目出现错误:Cannot access alimaven 1)问题2) 分析问题3)解决问题 1)问题 创建maven的Springboot项目出现错误: Cannot access alimaven (http://maven.aliyun.com/nexus/content/groups/p…...
神经网络基础-神经网络补充概念-32-神经网络与大脑
概念 神经网络(Neural Networks)是受到生物神经系统启发而设计的机器学习模型,用于处理和学习复杂的数据模式。尽管神经网络的设计和工作原理与大脑有一些相似之处,但它们并不完全相同,以下是神经网络和大脑之间的一些…...
linux自动填充密码及提示信息
背景:需要自动创建nvc的登录密码 sudo apt-get install expect expect 是由Don Libes基于Tcl(Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互…...
IC设计中主要的EDA工具有哪些? (内附EDA虚拟机安装资源)
EDA工具的使用涵盖了芯片的功能设计、综合、验证、物理设计等环节,更是被称作“芯片设计的工作母机”。下面就来为大家具体介绍一下常见的EDA工具。(需要EDA虚拟机安装资源文末可领取~) 什么是EDA? EDA是电子设计自动化…...
Zabbix配置通用的TCP/IP:port监控项
我们经常的用接口,比如说FTP、HTTP、DNS、数据库接口,都可以用IP:PORT方式探测其是否存活,那么我们去繁就简,就简单监控一下IP:PORT吧! 1、新建主机: 填入主机名称、群组、Agent可以不填&…...
【RocketMQ】SpringBoot集成RocketMQ
SpringBoot集成RocketMQ 首先依旧是引入依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version> </dependency>然后就可以编写发送不同类…...
思腾云计算
思腾合力受邀参加第七届世界智能大会,届时在会上展出思腾合力 AI 服务器。诚挚邀请与会者来思腾展位(S10-B04)参观与交流,领取七彩虹电竞机械键盘与鼠标、正版NVIDIA信仰尺、公牛魔方智能USB插座、超大桌面鼠标垫等精美礼品。 由天…...
前端面试:【HTML】语义化标签、表单、媒体元素
HTML(超文本标记语言)是构建网页内容的基础,它通过一系列标签来描述页面的结构和内容。在这篇文章中,我们将探讨HTML的基础知识,包括语义化标签、表单和媒体元素。 语义化标签:赋予内容更多意义 语义化标签…...
2024浙大MBA/MEM/MPA四个月冲刺备考策略
近期收到很多考生的咨询:距离联考就仅剩四个多月的时间,这个管理类联考的难度如何?主要考些什么内容?现在才开始备考还有希望上岸浙大吗?是不是要等到明年在开始备考比较合适?那么今天在这里小立老师就跟大…...
Element通过v-for循环渲染的form表单校验
需求:有个表单信息是v-for渲染的,例如下图,通过循环遍历实现新增和删除模块,按照平时的写法实现校验,是不能实现我们想要的效果,根据这个需求,我找到了一个解决方法 1.HTML <el-form ref&qu…...
精彩回顾 | 迪捷软件出席2023ATC汽车电子与软件技术周
2023年8月18日,由ATC汽车技术会议主办,上海市集成电路行业协会支持的“2023ATC汽车电子与软件技术周”在上海市圆满落幕。迪捷软件上海参展之行圆满收官。 ▲开幕式 本次峰会汇聚了整车厂、汽车零部件集团、软硬件方案提供商、软件工具供应商、软件测试…...
树莓派的自启动与桌面应用程序
目录 1 打开终端自启动 .bashrc 2 触发时机较早的开机自启动rc.local 3 桌面应用程序 4 触发时机较晚的的开机自启动 autostart 1 打开终端自启动 .bashrc .bashrc的程序也可以在开机时进行自启动,但是每一次打开终端时同样会运行一遍,所以只需…...
RabbitMQ面试题
1. 什么是MQ MQ 就是消息队列。是软件和软件进行通信的中间件产品 2. MQ的优点 异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。 流量削锋 - 可以通过消息队列长度控制请求量…...
Kubernetes二进制部署方案
目录 一、环境准备 2.1、主机配置 2.2、安装 Docker 2.3、生成通信加密证书 2.3.1、生成 CA 证书(所有主机操作) 2.3.2、生成 Server 证书(所有主机) 2.3.3、生成 admin 证书(所有主机) 2.3.4、生成 proxy 证书 三、部署 …...
Android 13 开启关闭飞行模式
一.背景 由于客户定制的Settings里面需要开启和关闭飞行模式,所以需要实现此功能。 二.前提条件 首先应用肯定要是系统应用,并且导入framework.jar包,具体可以参考: Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能_android 自动开启无障碍服务_龚礼鹏的博客…...
C++学习笔记总结练习:EffectiveSTL
文章目录 使用STL库的55条建议1.慎重选择容器的类型2.不要试图编写独立于容器的代码3.确定容器中的对象拷贝正确且高效4.调用empty判断是否为空,而不是size5.区间成员函数优于与之对应单元素成员函数6.如果容器中包含了通过new操作创建的指针,切记在容器…...
SQL Developer中的Data Redaction
SQL Developer中的Data Redaction用起来比命令行方便多了。可以选定表或视图,右键点击“遮盖保护”菜单。 但赋权方面有需要注意的地方。 假设Redact Admin是SYS,Redact User是HR。虽然SYS具备所有权限,但还是报以下错误。其实这个错误是针…...
深入解析Ed25519椭圆曲线数字签名算法的C#移植及应用示例
第一部分:Ed25519算法的简介与重要性 随着数字加密技术的飞速发展,我们不断地探索更安全、更高效的加密算法来保护数据和身份验证。其中,Ed25519已经成为了椭圆曲线数字签名算法(ECDSA)的一个重要分支,其在…...
XQuery创建BaseX数据库实例
XQuery创建BaseX数据库实例 文章目录 XQuery创建BaseX数据库实例1、准备工作2、demo目录结构3、IDEA配置BaseX4、工具类BaseXClient5、Example 1、准备工作 开发工具: IDEAOxygen 技术: JavaBaseXXpathXquery BaseX需要阅读的文档: htt…...
系统稳定性测试利器:Roast烤机工具原理与实践指南
1. 项目概述:一个为“烤”而生的开源工具最近在折腾一些自动化任务时,发现了一个挺有意思的开源项目,叫sumleo/roast。光看名字,你可能会联想到“烤肉”,但在程序员的世界里,这个“roast”可不是让你去烧烤…...
WarcraftHelper技术方案:游戏兼容性修复工具的现代化适配实践
WarcraftHelper技术方案:游戏兼容性修复工具的现代化适配实践 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 随着Windows操作系统和硬件架…...
青少年抑郁焦虑干预平台怎么选?7大维度对比指南
一、为什么要看这份榜单青少年抑郁焦虑问题已成为当代家庭教育中最棘手的挑战之一。据《2023年度中国精神心理健康》蓝皮书数据,我国青少年抑郁风险检出率约为15%-20%,而焦虑、厌学、社恐等情绪行为问题更为普遍。面对如此庞大的需求,家长在寻…...
构建支持多模型切换的智能内容审核与打标系统
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 构建支持多模型切换的智能内容审核与打标系统 在用户生成内容平台中,视频、图文等内容的审核与分类打标是核心运营环节…...
爱搜索 GEO 营销系统实效展示与能力验证
在当前的数字营销环境中,许多企业发现传统的 SEO 手段在应对 AI 驱动的搜索场景时显得力不从心。当潜在客户向大模型提问“哪家装修公司更靠谱”或“推荐几家铝板输送机厂家”时,如果品牌未能出现在 AI 生成的答案中,就意味着失去了最精准的流…...
2026 年 5 月 CERT 发布 dnsmasq 六个严重安全漏洞,2.93 版本或一周左右发布
消息基本信息西蒙凯利在 2026 年 5 月 11 日,周一,协调世界时 17:18:25 发布消息,上一条消息(按线程)是[[Dnsmasq 讨论组] DHCP 请求中电路 ID 匹配问题],下一条消息(按线程)是[[Dns…...
改进灰狼算法天线优化设计【附代码】
✨ 长期致力于灰狼优化算法、直线阵列天线、平面阵列天线、微带天线研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)Logistic-Tent双重混沌初始化与非…...
工作10年才明白,这些被忽略的编程基础,才是升职加薪的关键
文章目录前言一、代码规范:不是“处女座洁癖”,是AI时代的“保命符”二、函数式编程:你以为“写SpringBoot用不上”,其实AI Agent全靠它三、命令行与系统模块:别让“IDE一键运行”,毁了你的生产效率四、经典…...
汽车科技前沿:从上海车展看电动化、自动驾驶与供应链变革
1. 四月汽车科技前沿动态概览又到了每月梳理行业动态的时候了。四月份的汽车科技圈,用一个词来形容就是“多点开花”。上海车展的盛大回归,像一剂强心针,宣告了全球汽车产业活力的全面复苏。与此同时,软件定义汽车的浪潮下&#x…...
Qt WebEngine实战避坑:证书管理、代理设置与高DPI适配那些事儿
Qt WebEngine实战避坑指南:证书管理、代理配置与高DPI适配深度解析 在跨平台桌面应用开发领域,Qt WebEngine作为Chromium引擎的封装实现,为开发者提供了强大的Web内容嵌入能力。然而在实际项目落地过程中,开发者常会遇到三类典型问…...
