深入浅出的学习变量(局部、全局、系统、位置、只读变量... set 命令、export 命令、以及如何设置环境变量!)

本文详细介绍了Shell中的变量,包括局部、全局、系统和只读变量的定义与使用。讲解了如何通过set、export命令设置和查看变量,以及环境变量在用户和系统级别的配置。特别强调了局部和全局变量的父子进程传递规则,并探讨了位置变量和系统变量如$*与$@的区别。此外,还提到了设置环境变量的重要性及其在不同用户和系统级别配置文件的应用。
摘要由CSDN通过智能技术生成

文章目录

 


 

变量?

        顾名思义,变量变量就是可以变化的量!当然这是一句废话!

举例:
        当我们想使用内存空间中的字符串“aaa”的时候,那么在内存空间中就有一个这个字符串“aaa”的地址,在计算机里,存放数据都为二进制格式“010101…”,对于计算机来说,使用“010101…”这个地址很简单,但是对于我们用户来说,那么多字符串的地址我们怎么可以记得住,为了方便就使用变量!

格式:     值类型 varname=“值”(静态语言)
                或
                varname=“值”(动态语言)

 


 

变量的赋值:

       

①、静态语言 或 强类型

        在使用变量的时候,必须声明 变量的类型
        eg: C++、java…

int varname=100;

int 大家都知道是指定 "整数类型" 的一个 "函数"
②、动态语言 或 弱类型

        在使用变量的时候,不需要声明 变量的类型 变量的类型一般就是被赋值的那个值的类型!
        eg:Python、PHP、shell…

varname=100;

100是整数,所以这里 varname 的类型就为 int

 


 

变量名命名规则?

①、不建议使用程序中的保留字:例如 if、for…

root@zhengzelin:~# type if
if is a shell keyword(关键字)

"可以使用,但是不建议使用。"

②、只能使用数字、字母、下划线,不能使用数字开头

root@zhengzelin:~# n1=aaa  (√)

root@zhengzelin:~# 1n=aaa  (×)
1n=aaa: command not found

root@zhengzelin:~# n?=aaa  (×)
n?=aaa: command not found

③、驼峰命名法

在命名变量名的时候,每个人的格式不一样;假如定义一个变量名为 my name ,
可能出现的格式:myname、my_name、MyName或者myName。

这样的命名规则不适合所有程序员阅读,而利用驼峰命名法来表示,可以增加程序可读性。例如:

"大驼峰" —— 所有单词的首字母都大写:       myname  = MyName
"小驼峰" —— 第一个单子首字母小写,后续大写:myname =myName

如果你的上头要求用什么格式写就按什么格式写,没要求就按 “驼峰命名法”

 

bash 中 变量的种类:

 
注意:这里说到了是 shell 中的 bash shell ,其他的shell有一点细微区别!
 

①、局部变量:

        顾名思义,就是局部范围内有效只在 当前shell进程 生效(包括其子进程都不生效)。

        同理:在子shell创建的变量 ,在父shell 里也不生效!

 

★ 如何使用局部变量?
a=1   #这就是一个局部变量,最为简单,直接赋值即可!
★ 如何证明局部变量的生效范围?
①、首先 使用 set 命令查看所有变量:
首先,在当前shell 创建一个变量:
root@zhengzelin:~# a=1
root@zhengzelin:~# echo $a
1
root@zhengzelin:~# set | grep "^a"
a=1
②、接着 使用 bash 命令 进入当前shell 的子shell 进程:
# bash 命令是在后台执行,并不影响其他命令的使用。

root@zhengzelin:~# echo $$   # 查看当前 shell进程 的 PID23905
root@zhengzelin:~# bash      # 再次打开一个shell进程,也就是当前shell进程的子进程
root@zhengzelin:~# echo $$   # 查看当前 shell进程 的 PID23921
root@zhengzelin:~# echo $PPID   # 查看当前shell进程的父shell进程的PID
23905

之前的 变量a 是在当前 shell进程 的父进程内命名的,
在当前shell 中查看 之前的变量 a 是否存在:
root@zhengzelin:~# set | grep ^a
[]
"发现此时的 变量a 不复存在!证明了局部变量的范围!"

如何返回当前子shell进程 的父进程? 下面会使用:
③、然后 使用 pstree -p 来查看进程之间的树状关系图:
root@zhengzelin:~# echo $$      # 本 shell 的进程
23921
root@zhengzelin:~# echo $PPID    # 父shell的进程
23905

root@zhengzelin:~# pstree -p 
systemd(1) |........(省略...)
           ├─sshd(963)───sshd(23887)───bash(23905)───bash(23921)───pstree(23936)

可以很清楚的看见: 2390523921 的关系。

   
④、最后 使用 exit 命令退出当前 shell进程:
返回当前 shell 进程 的父shell进程:

root@zhengzelin:~# echo $PPID
23905
root@zhengzelin:~# echo $$
23921
root@zhengzelin:~# exit
exit
root@zhengzelin:~# echo $$
23905

再次查看之前的变量a
root@zhengzelin:~# set | grep ^a
a=1

 


②、全局变量(环境变量):

        生效范围 为 当前shell进程 及其 子shell 进程。

 

★ 常用的全局变量列表:
变量名 作用 用法
PATH 定义了 运行命令的查找路径 echo $PATH
HOME 显示当前用户所在的家目录 同上
LANG 显示当前的系统语言 同上
SHELL 显示当前的 shell类型 同上
SHLVL 显示当前shell进程的嵌套深度 同上
USER 显示当前的 username 同上
HISTSIZE 输出的历史命令记录条数 同上
HISTFILESIZE 显示 保存的历史命令记录条数 同上
PS1 系统登录提示符(#、$) +1

eg:使用 SHLVL 变量:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值