shell变量详解

变量含义

学生时代所学的数学方程式,如x=1,y=2,那会称之为x,y是未知数

对于计算机角度,x=1,y=2等于定义了两个变量,名字分别是x,y,且赋值了1和2

变量是暂时存储数据的地方,是一种数据标记(房间号,标记了客人所在的位置),数据存储在内容空间,通过调用正确的变量名字,即可取出对应的值。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7tExr1WT-1678231830756)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20191123202024993.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lmVqO46x-1678231830760)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20191123203516529.png)]

shell变量

  • 变量定义与赋值,注意变量与值之间不得有空格
name="超哥"

变量名
变量类型,bash默认把所有变量都认为是字符串

bash变量是弱类型,无需事先声明类型,是将声明和赋值同时进行
  • 变量替换/引用
[root@chaogelinux ~]# name="超哥带你学bash"
[root@chaogelinux ~]# echo ${name}
超哥带你学bash
[root@chaogelinux ~]# echo $name    #可以省略花括号
超哥带你学bash
  • 变量名规则
    • 名称定义要做到见名知意,切按照规则来,切不得引用保留关键字(help检查保留字)
    • 只能包含数字、字母、下划线
    • 不能以数字开头
    • 不能用标点符号
    • 变量名严格区分大小写
有效的变量名:
NAME_CHAOGE
_chaoge
chaoge1
chaogE1
Chao2_ge

无效的变量名:
?chaoge
chao*ge
chao+ge
  • 变量的作用域

    • 本地变量,只针对当前的shell进程
    pstree检查进程树
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTrZ42Md-1678231830761)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20191123210752571.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XEOUmWm1-1678231830762)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20191123210942192.png)]

    • 环境变量,也称为全局变量,针对当前shell以及其任意子进程,环境变量也分自定义内置两种环境变量
    • 局部变量,针对在shell函数或是shell脚本中定义
  • 位置参数变量:用于shell脚本中传递的参数

  • 特殊变量:shell内置的特殊功效变量

    • $?
      • 0:成功
      • 1-255:错误码
  • 自定义变量

    • 变量赋值:varName=value

    • 变量引用:${varName}$varName

      • 双引号,变量名会替换为变量值
      [root@chaogelinux ~]# n1=1
      [root@chaogelinux ~]# n2=2
      [root@chaogelinux ~]#
      [root@chaogelinux ~]# n3="$n1"
      [root@chaogelinux ~]# echo $n3
      1
      [root@chaogelinux ~]# n4='$n2'
      [root@chaogelinux ~]# echo $n4
      $n2
      
      • 单引号,识别为普通字符串

不同的执行方式,不同的shell环境

[root@chaogelinux data]# echo user1='超哥' > testsource.sh
[root@chaogelinux data]# echo $user1

[root@chaogelinux data]# sh testsource.sh
[root@chaogelinux data]# echo $user1

[root@chaogelinux data]# source testsource.sh
[root@chaogelinux data]# echo $user1
超哥

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g2BHmsJd-1678231830763)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20191128143311747.png)]

解答:

1.每次调用bash都会开启一个子shell,因此不保留当前的shell变量,通过pstree命令检查进程树

2.调用source是在当前shell环境加载脚本,因此保留变量

shell变量面试题

问,如下输入什么内容

[root@chaogelinux data]# cat test.sh
user1=`whoami`
[root@chaogelinux data]# sh test.sh
[root@chaogelinux data]# echo $user1

A.当前用户
B.超哥
C.空

环境变量设置

环境变量一般指的是用export内置命令导出的变量,用于定义shell的运行环境、保证shell命令的正确执行。

shell通过环境变量确定登录的用户名、PATH路径、文件系统等各种应用。

环境变量可以在命令行中临时创建,但是用户退出shell终端,变量即丢失,如要永久生效,需要修改环境变量配置文件

  • 用户个人配置文件~/.bash_profile~/.bashrc 远程登录用户特有文件
  • 全局配置文件/etc/profile/etc/bashrc,且系统建议最好创建在/etc/profile.d/,而非直接修改主文件,修改全局配置文件,影响所有登录系统的用户

检查系统环境变量的命令

  • set,输出所有变量,包括全局变量、局部变量
  • declare,输出所有的变量,如同set
  • export,显示和设置环境变量值(显示全局变量)
  • env,只显示全局变量

撤销环境变量

  • unset 变量名,删除变量或函数。

设置只读变量

  • readonly ,只有shell结束,只读变量失效
直接readonly 显示当前系统只读变量
[root@chaogelinux ~]# readonly name="超哥"
[root@chaogelinux ~]# name="chaochao"
-bash: name: 只读变量

系统保留环境变量关键字

bash内嵌了诸多环境变量,用于定义bash的工作环境

[root@chaogelinux ~]# export |awk -F '[ :=]' '{print $3}'

bash多命令执行

[root@chaogelinux home]# ls /data/;cd /tmp/;cd /home;cd /data

环境变量初始化与加载顺序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N1BiYg6f-1678231830764)(http://book.luffycity.com/linux-book/Shell%E7%BC%96%E7%A8%8B/pic/image-20200319102558364.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值