当前位置: 首页 > ops >正文

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

目录

一.变量

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.xdnf.cn/news/9666.html

相关文章:

  • Spring框架学习day2--Bean管理(IOC)
  • 【博客系统】博客系统第十一弹:部署博客系统项目到 Linux 系统
  • Elasticsearch集群管理的相关工具介绍
  • [Rust_1] 环境配置 | vs golang | 程序运行 | 包管理
  • 自定义异常小练习
  • Intellij IDEA 查找接口实现类的快捷键
  • CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
  • 数据可视化(第4、5、6次课)
  • 【Java Web】速通JavaScript
  • k8s pod启动失败问题排查
  • NanoGPT的BenchMarking.py
  • 数据治理是什么意思?数据治理平台有哪些?
  • 如何使用.Net Reactor 批量加密 DLL
  • PostgreSQL 备份与恢复策略
  • docker网络相关内容详解
  • Java开发经验——阿里巴巴编码规范实践解析7
  • Axure设计案例——科技感立体柱状图
  • 动态规划-931.下降路径最小和-力扣(LeetCode)
  • 高光谱成像相机:基于高光谱成像技术的玉米种子纯度检测研究
  • 华为OD机试真题——阿里巴巴找黄金宝箱(II)(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 小程序 - 视图与逻辑
  • MySQL的基本架构
  • 社群分享:义乌|杭州电商|店群卖家,私域鱼塘运营的排单系统开源|私域鱼塘运营|返款软件开源
  • Typora-macOS 风格代码块
  • Kotlin Multiplatform与Flutter深度对比:跨平台开发方案的实战选择
  • ZYNQ sdk lwip配置UDP组播收发数据
  • ICECEPSS 2025:节能环保与社会治理的融合之道
  • Windows系统安装MySQL Connector 使用C++ VS2022连接MySQL
  • 吉林大学操作系统上级实验四(hash存储讲解及顺序存储文件管理实现)
  • 【LangChain】框架解析