Shell变量详解
变量
变量含义
对于计算机角度,x=1,y=2等于定义了两个变量,名字分别是x,y,且赋值了1和2
变量是暂时存储数据的地方,是一种数据标记(房间号,标记了客人所在的位置),数据存储在内容空间,通过调用正确的变量名字,即可取出对应值
shell变量
- 变量定义与赋值,注意变量与值之间不得有空格
[root@localhost ~]# name="王德法"
[root@localhost ~]#
#变量名
#变量类型,bash默认把所有变量都默认为字符串
#bash变量是弱类型,无需实现声明类型,是将声明和赋值同时进行
- 取出变量值
- 单引号 所见即所得,强引用
- 双引号 输出引号里所有内容,识别特殊符号,弱引用
- 无引号 连续符号可以不加引号,有空格则有歧义,最好使用双引号
- 反引号 引用命令执行结果 ,等于 $()用法
- 变量替换/引用
[root@localhost ~]# name="王德法"
[root@localhost ~]# echo ${name}s
王德法
[root@localhost ~]# echo $name #可以省略花括号
王德法
[root@localhost ~]#
-
变量名规则
- 名称定义要做到见名知意,且按照规则来,且不得引用保留关键字(help检查保留字)
- 只能包含数字,字母,下划线
- 不能以数字开头
- 不能用标点符号
- 变量名严格区分大小写
-
变量的作用域
- 本地变量,只针对当前的shell进程
- 环境变量,也称全局变量,针对当前shelll以及任意子进程,环境变量他也分自定义和内置两种环境变量
- 局部变量,针对在shell函数或是shell脚本中定义
################本地变量,针对某一个会话生效,针对shell进程定义
[root@localhost ~]# var="父shell变量"
[root@localhost ~]# echo $var
父shell变量
[root@localhost ~]# sh
sh-4.2# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
.......
├─gnome-shell-cal───5*[{gnome-shell-cal}]
├─gnome-terminal-─┬─bash───sh───pstree #在当前子shell
sh-4.2# ${var}
sh-4.2# echo ${var}
sh-4.2# var="子shell"
sh-4.2# echo ${var}
子shell
sh-4.2# exit ####切换出子shell后子shell的变量丢失
exit
[root@localhost ~]# echo ${var}
父shell变量
[root@localhost ~]# sh ###重新开起的shell应该不是以前的子shell所以变量
sh-4.2# echo ${var}
sh-4.2#
##############全局变量
[root@localhost ~]# echo ${PATH}
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
[root@localhost ~]# sh
sh-4.2# echo ${PATH}
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
sh-4.2#
-
位置参数变量:用于shell脚本中传递的参数
[root@localhost ~]# ls -l /home 总用量 209180 ####-l 和/home 都是位置参数
-
特殊变量:shell内置的特殊功效变量
- $? :常用于脚本中判定上一条命令执行是否报错
- 0:成功
- 1-255: 错误玛
[root@localhost ~]# ls -l /home/tmp 总用量 72 -rw-r--r--. 1 root root 99 8月 23 17:25 ! -rw-r--r--. 1 root root 0 8月 24 16:52 0 ........ [root@localhost ~]# echo $? 0 [root@localhost ~]# ls -l/home/tmp ls:无效选项 -- / Try 'ls --help' for more information. [root@localhost ~]# echo $? 2 [root@localhost ~]#
- $? :常用于脚本中判定上一条命令执行是否报错
-
自定义变量
- 变量赋值: varNmae=value
- 变量引用:${varName}、$varName
- 双引号,变量名称会替换为变量值
- 单引号,识别为普通字符串
即单引号变量,不识别特殊符号;双引号变量,能识别特殊符号
[root@localhost ~]# var1=1 [root@localhost ~]# var2=2 [root@localhost ~]# a1="$var1" [root@localhost ~]# a2='$var2' [root@localhost ~]# echo $a1 1 [root@localhost ~]# echo $a2 $var2 [root@localhost ~]#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!