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…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...