【Linux】shell脚本的变量与运算

article/2025/9/6 18:31:20

目录

一.变量

1.1什么是变量

1.2变量的命名 

1.3变量的调用

1.4字符的转义

1.5变量的取消

二.变量的类型

2.1函数级变量

2.2环境级变量

2.3用户级变量

2.4系统级变量

2.5常见的系统变量

三..特殊变量及定义

3.1用命令的执行结果定义变量

3.2传参变量

3.3交互式传参变量

3.4数组变量

3.5字符串变量

四.shell脚本中的函数

五.shell中的运算

练习:倒计时脚本


一.变量

1.1什么是变量

  • 变量是使用一串固定的字符来表示不固定的值
  • 变量的实现原理就是内存存储单元的一个符号名称

1.2变量的命名 

  • 变量的名称只能包含数字,大小写字母,以及下划线
  • 变量的名称开头只能用大小写字母及下划线开头,不能使用数字开头
  • 同一个名称变量,在多次被赋值时为覆盖操作
  • 变量的名称复杂可以使用驼峰命令发中间用下划线隔开

1.3变量的调用

变量的调用使用到$符

在对变量赋值后,使用$符直接调用变量名称

如果要表示1number

在调用变量的时候使用{}把变量名称括起来,{}可以对数组变量,字符串变量进行操作

1.4字符的转义

  • 在shell中有很多本身有特殊功能的字符,比如( ' \ ! $),所以就需要转义
  • 在shell中表示转义的有,反斜杠 /,双引号 " ",单引号 ' '
  • 双引号与单引号表示批量转义,区别在于双引号为弱引用,单引号为强引用,弱引用不能引用( ' \ ! $)

1.5变量的取消

unset 变量名

二.变量的类型

2.1函数级变量

在脚本中编辑函数定义变量,定义函数级变量,要加local不然默认会把函数的变量传出去函数外

2.2环境级变量

2.3用户级变量

2.4系统级变量

[root@FJWYYY ~]# vim /etc/profile
[root@FJWYYY ~]# source /etc/profile        #使其配置立刻生效

2.5常见的系统变量

三..特殊变量及定义

3.1用命令的执行结果定义变量

3.2传参变量

由于脚本要接受用户命令行的输入,从命令行传递给shell脚本的参数称为位置参数,使用不同的位置变量来读取位置参数的值

[root@FJWYYY ~]# vim test1.sh
[root@FJWYYY ~]# sh test1.sh X1 X2 X3 #三个输入参数
$0 is test1.sh
$1 is X1
$2 is X2
$3 is X3
$@ is X1 X2 X3
$* is X1 X2 X3
$# is 3

3.3交互式传参变量

使用read命令进行交互式传参赋值变量

#运行命令
[root@FJWYYY ~]# read A
hello
[root@FJWYYY ~]# echo $A
hello
[root@FJWYYY ~]# read A B C
X1 X2 X3
[root@FJWYYY ~]# echo $A $B $C
X1 X2 X3
[root@FJWYYY ~]# read -a arry        #-a 用来定义一个数组变量
1 2 3 4 5
[root@FJWYYY ~]# echo ${arry[@]}
1 2 3 4 5
[root@FJWYYY ~]# echo ${arry[0]}
1
[root@FJWYYY ~]# echo ${arry[-1]}
5
[root@FJWYYY ~]# echo ${#arry[*]}
5
[root@FJWYYY ~]# read -p "Please input word:" A      
Please input word:123
[root@FJWYYY ~]# echo $A
123
[root@FJWYYY ~]# read -p "Please input word:" -s A
Please input word:[root@FJWYYY ~]# echo $A
456
[root@FJWYYY ~]# read -t 5 A
[root@FJWYYY ~]# read -n 5 A
12345[root@FJWYYY ~]# echo $A
12345
[root@FJWYYY ~]# read -d "." A
12345678.[root@FJWYYY ~]# echo $A
12345678
[root@FJWYYY ~]#

3.4数组变量

shell中的数组变量操作

#运行命令[root@FJWYYY ~]# A=(1 2 3 4 5)[root@FJWYYY ~]# echo $A
1
[root@FJWYYY ~]# echo ${A[*]}
1 2 3 4 5
[root@FJWYYY ~]# echo ${A[@]}
1 2 3 4 5
[root@FJWYYY ~]# echo ${A[0]}
1
[root@FJWYYY ~]# echo ${A[1]}
2
[root@FJWYYY ~]# echo ${A[-1]}
5
[root@FJWYYY ~]# echo ${A[*]:0:3}
1 2 3
[root@FJWYYY ~]# echo ${#A[*]}
5
[root@FJWYYY ~]# echo ${#A[@]}
5
[root@FJWYYY ~]# A[3]=8
[root@FJWYYY ~]# echo ${A[@]}
1 2 3 8 5
[root@FJWYYY ~]# unset A[0]
[root@FJWYYY ~]# echo ${A[@]}
2 3 8 5
[root@FJWYYY ~]#

3.5字符串变量

shell中的字符串变量操作

[root@FJWYYY ~]# a="easy/lee/test.tar.gz"
[root@FJWYYY ~]# echo ${a}
easy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${#a}
20
#指定字符
[root@FJWYYY ~]# echo ${a:5}
lee/test.tar.gz
[root@FJWYYY ~]# echo ${a:1}
asy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${a:0-3}
.gz
[root@FJWYYY ~]# echo ${a:5:2}
le
[root@FJWYYY ~]# echo ${a:0-3:2}
.g
[root@FJWYYY ~]# echo ${a::3}
eas
#检索删除
[root@FJWYYY ~]# echo ${a#*/}
lee/test.tar.gz
[root@FJWYYY ~]# echo ${a#/*}
easy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${a##/*}
easy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${a##*/}
test.tar.gz
[root@FJWYYY ~]# echo ${a%*/}
easy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${a%/*}
easy/lee
[root@FJWYYY ~]# echo ${a%%/*}
easy
[root@FJWYYY ~]# echo ${a%%*/}
easy/lee/test.tar.gz
#字符替换
[root@FJWYYY ~]# echo ${a/./@}
easy/lee/test@tar.gz
[root@FJWYYY ~]# echo ${a//./@}
easy/lee/test@tar@gz
[root@FJWYYY ~]# echo ${a/./#}
easy/lee/test#tar.gz
[root@FJWYYY ~]# echo ${a//./#}
easy/lee/test#tar#gz
[root@FJWYYY ~]# echo ${a#}
easy#lee#test.tar.gz
[root@FJWYYY ~]# echo ${a///#}
easy/lee/test.tar.gz
[root@FJWYYY ~]# echo ${a/\//#}
easy#lee/test.tar.gz

四.shell脚本中的函数

脚本中的函数也可寓为脚本中的脚本

以下是一个更换颜色的脚本,没有运用到函数

以下是用了函数的更换颜色的脚本

以下是一个交互式的输入脚本,做到了无限循环

五.shell中的运算

shell中的运算命令

练习:倒计时脚本


http://www.hkcw.cn/article/nlyIckKMeD.shtml

相关文章

Linux进程概念

一.冯诺依曼体系结构 冯诺依曼体系结构是当代计算机的基本结构,它主要包括几个板块,输入设备,输出设备,存储器,运算器和控制器。 下面是简略版的图解析: 输入设备主要包含鼠标,键盘&#xff0…

[9-2] USART串口外设 江协科技学习笔记(9个知识点)

1 2 3 智能卡、IrDA和LIN是三种不同的通信技术,它们在电子和汽车领域中有着广泛的应用: • 智能卡(Smart Card): • 是什么:智能卡是一种带有嵌入式微处理器和存储器的塑料卡片,可以存储和处理数…

低代码——表单生成器以form-generator为例

主要执行流程说明: 初始化阶段 : 接收表单配置对象formConf深拷贝配置,初始化表单数据和验证规则处理每个表单组件的默认值和特殊配置(如文件上传) 渲染阶段 : 通过render函数创建el-form根组件递归渲染表…

奥威BI+AI——高效智能数据分析工具,引领数据分析新时代

随着数据量的激增,企业对高效、智能的数据分析工具——奥威BIAI的需求日益迫切。奥威BIAI,作为一款颠覆性的数据分析工具,凭借其独特功能,正在引领数据分析领域的新纪元。 一、‌零报表环境下的极致体验‌ 奥威BIAI突破传统报表限…

grid网格布局

使用flex布局的痛点 如果使用justify-content: space-between;让子元素两端对齐,自动分配中间间距,假设一行4个,如果每一行都是4的倍数那没任何问题,但如果最后一行是2、3个的时候就会出现下面的状况: /* flex布局 两…

基于 GitLab CI + Inno Setup 实现 Windows 程序自动化打包发布方案

在 Windows 桌面应用开发中,实现自动化构建与打包发布是一项非常实用的工程实践。本文以我在开发PackTes项目时的为例,介绍如何通过 GitLab CI 配合 Inno Setup、批处理脚本、Qt 构建工具,实现版本化打包并发布到共享目录的完整流程。 项目地…

江西某石灰石矿边坡自动化监测

1. 项目简介 该矿为露天矿山,开采矿种为水泥用石灰岩,许可生产规模200万t/a,矿区面积为1.2264km2,许可开采深度为422m~250m。矿区地形为东西一北东东向带状分布,北高南低,北部为由浅变质岩系组…

星海掘金:校园极客的Token诗篇(蓝耘MaaS平台)——从数据尘埃到智能生命的炼金秘录

hi,我是云边有个稻草人 目录 前言 一、初识蓝耘元生代MaaS平台:零门槛体验AI服务 1.1 从零开始——平台注册与环境搭建 1.2 平台核心功能 1.3 蓝耘平台的优势在哪里? 二、知识库构建新篇章:从零碎资料到智能语义仓库的蜕变…

测试概念 和 bug

一 敏捷模型 在面对在开发项目时会遇到客户变更需求以及合并新的需求带来的高成本和时间 出现的敏捷模型 敏捷宣言 个人与交互重于过程与工具 强调有效的沟通 可用的软件重于完备的文档 强调轻文档重产出 客户协作重于合同谈判 主动及时了解当下的要求 相应变化…

14. 最长公共前缀

以示例1为例 从左到右依次比较每个字符: 第一个字符都是f,当前最长公共前缀为"f"第二个字符都是l,当前最长公共前缀更新为"fl"第三个字符不一致,因此最终最长公共前缀确定为"fl" 具体实现思路&am…

【CF】Day69——⭐Codeforces Round 897 (Div. 2) D (图论 | 思维 | DFS | 环)

D. Cyclic Operations 题目: 思路: 非常好的一题 对于这题我们要学会转换和提取条件,从特殊到一般 我们可以考虑特殊情况先,即 k n 和 k 1时,对于 k 1,我们可以显然发现必须满足 b[i] i,而…

[9-1] USART串口协议 江协科技学习笔记(13个知识点)

1 2 3 4全双工就是两个数据线,半双工就是一个数据线 5 6 7 8 9 10 TTL(Transistor-Transistor Logic)电平是一种数字电路中常用的电平标准,它使用晶体管来表示逻辑状态。TTL电平通常指的是5V逻辑电平,其中:…

2025年- H57-Lc165--994.腐烂的橘子(图论,广搜)--Java版

1.题目描述 2.思路 3.代码实现 import java.util.LinkedList; import java.util.Queue;public class H994 {public int orangesRotting(int[][] grid) {//1.获取行数int rowsgrid.length;int colsgrid[0].length;//2.创建队列用于bfsQueue<int[]> quenew LinkedList<…

RK3568DAYU开发板-平台驱动开发--UART

1、程序介绍 本程序是基于OpenHarmony标准系统编写的平台驱动案例&#xff1a;UART 系统版本:openharmony5.0.0 开发板:dayu200 编译环境:ubuntu22 部署路径&#xff1a; //sample/06_platform_uart 2、基础知识 2.1、UART简介 UART指异步收发传输器&#xff08;Univer…

【东枫科技】KrakenSDR 测向快速入门指南

本快速入门指南旨在帮助您使用运行在 Raspberry Pi 4/5 或 Orange Pi 5B (OPI5B)&#xff08;带 WiFi 型号&#xff09;上的 KrakenSDR 尽快连接到测向应用程序。不过&#xff0c;请务必阅读本手册的其余部分&#xff0c;以了解无线电测向的工作原理。 你需要什么 本指南假设…

每日算法-250529

2909. 元素和最小的山形三元组 II 题目 思路 数组, 前后缀分解 解题过程 对于寻找满足特定条件的三元组 (nums[i], nums[j], nums[k]) 且 i < j < k 的问题&#xff0c;一个常见的思路是枚举中间元素 nums[j]。 确定目标&#xff1a;我们要找的是和最小的 “山形三元组…

ASP.NET MVC添加视图示例

ASP.NET MVC高效构建Web应用- 商品搜索 - 京东 视图&#xff08;V&#xff09;是一个动态生成HTML页面的模板&#xff0c;它负责通过用户界面展示内容。本节将修改HelloWorldController类&#xff0c;并使用视图模板文件&#xff0c;以干净地封装生成对客户端的HTML响应的过程…

Pix4d航测软件正射影像生产流程(一)项目创建及快速空三

1.数据准备 此数据为精灵4RTK无人机拍摄的照片,照片数据完整,像控点数据为RTK采集的CGCS2000坐标系数据。 2.打开pix4D航测软件、打开新项目 打开pix4D航测软件,软件必须在断网的情况下使用。

day 24 元组和OS模块

一、元组 元组&#xff08;Tuple&#xff09;是 Python 中一种不可变的序列数据类型。元组一旦创建&#xff0c;其元素不能被修改、删除或添加。这一特性使得元组在需要保护数据不被意外更改的场景中非常有用&#xff0c;比如作为字典的键或在多线程环境中共享数据。 1、元组…

python 制作复杂表格报告

python 制作复杂表格报告 最近用&#xff4f;&#xff44;&#xff4f;&#xff4f;集成检测系统&#xff0c;有一复杂表格报告需要处理&#xff0c;即要用到数据库中详细实验信息&#xff0c;检测项格式也不统一&#xff0c;在word中需要有宣然&#xff0c;有列合并&#xff…