shell变量
1、变量的理解
1 2 3 4 5 6 7 | 1、变量本质 内存中的一块区域 变量名 位置 2、存放经常用到的内容 3、Linux下面的变量直接使用即可 4、数据类型(变量在内存中 所占多少空间 变量类型) 不同类型的变量存放不同类型的数据 |
2、变量的类型
—— 环境变量(全局变量 )
—— 普通变量(局部变量)
—— shell变量
(1)环境变量(全局变量 )
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
1 2 3 | 系统定义 大写字母 在系统中 各个地方基本都适用 |
1 2 3 | env set declare unset 取消变量 export |
(2)普通变量(局部变量)
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
1 2 3 4 5 | 命名规则 不能以数字开头 不要占用系统环境变量 驼峰:oldboyAgeSex=1 age_person = 1 |
(3)shell变量
1 | shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行 |
3、变量赋值和使用
(1)变量赋值
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
1 | name = "yinghui" |
(2)变量使用
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
1 2 3 | your_name= "qinjx" <br> echo $your_name echo ${your_name} |
4、只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变
下面的例子尝试更改只读变量,结果会报错:
1 2 3 4 | #!/bin/bash myUrl= "https://www.google.com" readonly myUrl myUrl= "https://www.runoob.com" |
5、删除变量(unset)
1 | unset variable_name<br><br> # 变量被删除后不能再次使用。unset命令不能删除只读变量。 |
6、shell字符串
(1)字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
(2)拼接字符串:
1 2 3 4 5 6 7 8 9 | your_name= "runoob" # 使用双引号拼接 greeting= "hello, " $your_name " !" greeting_1= "hello, ${your_name} !" echo $greeting $greeting_1 # 使用单引号拼接 greeting_2= 'hello, ' $your_name ' !' greeting_3= 'hello, ${your_name} !' echo $greeting_2 $greeting_3 |
(3)获取字符串长度
1 2 | string= "abcd" echo ${ #string} #输出 4 |
(4)提取子字符串
如下——从字符串第 2 个字符开始截取 4 个字符:
1 2 | string= "runoob is a great site" echo ${string:1:4} # 输出 unoo |
(5)查找子字符串
查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):
1 2 | string= "runoob is a great site" echo ` expr index "$string" io` # 输出 4 |
7、shell数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。
(1)定义数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:
1 | 数组名=(值1 值2 ... 值n) |
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | array_name=(value0 value1 value2 value3) 或者: array_name=( value0 value1 value2 value3 ) 还可以单独定义数组的分量: array_name[0]=value0 array_name[1]=value1 array_name[n]=valuen |
(2)读取数组
格式:
1 | ${数组名[下标]} |
使用 @ 符号可以获取数组中的所有元素,例如:
1 | echo ${array_name[@]} |
(3)获取数组的长度
1 2 3 4 5 6 | # 取得数组元素的个数 length=${ #array_name[@]} # 或者 length=${ #array_name[*]} # 取得数组单个元素的长度 lengthn=${ #array_name[n]} |
8、特殊位置变量
9、特殊状态变量
10、变量子串
11、变量相关的文件
1 2 3 4 5 6 7 8 9 | /etc/profile /etc/bashrc ~/.bashrc ~/.bash_profile /etc/profile.d/*.sh |
12、变量扩展
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现