• Shell编程之第二讲——shell 的变量


    目录:

    • 定义变量
    • 使用变量
    • 只读变量
    • 删除变量
    • 变量作用域(全局变量,局部变量,环境变量)

    一、定义变量

    	简介: shell中定义变量与python语言类似
    	
    	语法: name=[value]
    		
    	注意事项:
    		1.value没有给出,变量将被赋值为空字符串
    		2.赋值等号两边不能有空格,这几乎和所有的编程语言都不一样
    		
    	变量名的命名规则同python:
    		1.英文字母,数字和下划线_
    		2.首字符不能是数字
    		3.不能使用bash中的关键字(help命令查看保留关键字)
    		4.定义变量有多种形式
    			例如:
    				1.当值中不包含空格时,可以不需要引号
    					name=henry
    		
    				2.当值中包含空格时,需要引号
    					name='henry fh'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述

    二、使用变量

    1.使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

    			name="henry"
    			echo $name
    			echo ${name}
    
    • 1
    • 2
    • 3

    2.变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
    例如:

    			echo "${name}是是是!"
    
    • 1

    在这里插入图片描述

    三、只读变量

    定义:使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变
    例如:

    nameurl="baidududu.com"   #  <======= 定义变量
    readonly nameurl        # <======= 设置变量为:只读变量
    
    nameurl="baidududvvvu.com"    # <======= 尝试更改只读变量
    -bash: nameurl: readonly variable    # <======= 报错提示只读变量不能被更改
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    四、删除变量

    1.定义:使用 unset 命令可以删除变量

    2.语法:unset variable_name

    3.变量被删除后不能再次使用。unset 命令不能删除只读变量。

    unset name   <======= 删除变量
    echo $name   <======= 再次输出变量,没有东西输出
    
    • 1
    • 2

    在这里插入图片描述

    五、变量作用域(全局变量,局部变量,环境变量)

    定义:运行shell时,会同时存在三种变量:局部变量,全局变量,环境变量

    1.局部变量:局部变量在脚本或命令中定义,仅在当前shell进程中有效

    例如:

    主shell进程:
    	name=henry   <======= 在命令行中定义变量name
    	echo $name   <======= 在当前命令行中定义变量name,可以输出当前变量
    
    子shell进程:
    	test.sh       <=======  创建脚本test.sh并输入命令echo $name ,获取主进程中的变量
    	bash test.sh   <======= 执行test.sh 发现脚本里访问不到变量name,应为定义的name是局部变量只在当前终端进程中有效
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.全局变量:在当前shell中任何地方可以使用的变量,且在子shell中也有效

    1. 查看所有全局变量:env 命令
    2. 如何定义全局变量:export 变量名=变量值

    例如:

    主shell进程:
    	export info=mk       <=======    在命令行中定义变量info为全局变量
    	echo $info       <=======    在当前命令行中定义变量info,可以输出当前变量
    
    子shell进程:
    	test.txt          <=======    创建脚本test.txt 并输入命令 echo $info,获取主进程中的变量
    	bash test.txt     <=======    执行test.txt 获取到全局变量info
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    1. 注意事项:
      1.export定义的全局变量是临时的,只对当前进行shell进程有效
      2.当关闭执行定义的shell进程后,定义的变量就会被销毁
      3.所以通过export定义的全局变量只能向下传递,也即是只能是父shell传递给子shell

    新开一个shell进程,去查看变量,是没有的
    在这里插入图片描述

    3.环境变量:定义环境变量在当前shell和其他shell进程中都可以使用

    1. 定义:
      1.所有的程序,包括shell启动的程序,都能访问环境变量
      2.有些程序需要环境变量来保证其正常运行,必要的时候shell脚本也可以定义环境变量
      3.环境变量本质上就是全局变量,只不过它是在启动终端(shell主进程)时通过执行初始化脚本预定义的。
    1. 如何定义环境变量:
      1.启动终端后直接输入:env命令 显示得所有变量都是环境变量
      2.要定义环境变量可以在以下文件中通过export定义:
    1.~/.bashrc    <======= 只对当前用户的终端有效
    	例如:
    		进入家目录,输入ls -a   <=======  查看所有的文件
    		vim .bashrc    <======= 定义环境变量,当前用户下的终端有效			
    2.~/.profile    <======= 只对当前用户的终端有效
    3./etc/bash.bashrc    <======= 对所有用户的终端有效
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    【云原生】Docker Compose初窥门径
    2021年ICPC国际大学生程序设计竞赛暨陕西省第九届大学生程序设计竞赛 L:String Games
    Linux ln命令:建立链接文件
    CSS基础入门手册
    用于割草机器人,商用服务型机器人的陀螺仪
    【学习笔记】Python+request+Unittest接口测试入门
    智能传感器有何不同?工业网关能用吗?
    【遗传算法】求解TSP问题
    深入 Qt5 信号槽新语法
    Qt(Python+Qt)QMainWindow的splitDockWidget方法将QDockWidget停靠窗分割排列
  • 原文地址:https://blog.csdn.net/qq_40236497/article/details/126677652