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 ~]# 
    
    
posted @   翻滚的小井蛙  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示