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

【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中的运算命令

练习:倒计时脚本

相关文章:

  • OpenAI o3安全危机:AI“抗命”背后的技术暗战与产业变局
  • 代码随想录算法训练营第五十三天
  • 什么是node.js、npm、vue
  • DeepSeek进阶教程:实时数据分析与自动化决策系统
  • IDEA项目推送到远程仓库
  • Intellij IDEA 查找接口实现类的快捷键
  • 全志F1c200开发笔记——移植Debian文件系统
  • 【Rust模式与匹配】Rust模式与匹配深入探索与应用实战
  • 力扣面试150题--二叉树的右视图
  • 高速连接器设计的真相
  • 由enctype-引出post与get的关系,最后深究至请求/响应报文
  • windows系统下通过visual studio使用clang tooling
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二十八) -> 开发云对象
  • 变更数据捕获(CDC)与流处理引擎实现医疗数据实时同步(下)
  • 【Python】3.函数与列表
  • 2025.05.28-华为暑期实习第二题-200分
  • Python 科学计算有哪些提高运算速度的技巧
  • 机器人--里程计
  • Java—多线程
  • DM达梦数据库开启SQL日志记录功能
  • 厦门好的做网站公司/广州网站建设费用
  • 第三方商城网站建设/长春seo结算
  • wordpress主题慢/seo文章代写一篇多少钱
  • 外贸b2c电子商务网站/友情链接的检查方法
  • 连云港做企业网站公司/新网站怎么做优化
  • 小门户网站模版/5151app是交友软件么