一、什么是Shell 变量
变量用于存储和管理临时的数据, 这些数据都是在运行内存中的;
二、变量的分类
shell中变量大致可以分为下面几类:
- 系统环境变量
- 自定义变量
- 特殊符号变量
系统环境变量
是由系统提供的共享变量。是linux系统加载Shell的配置文件中定义的变量共享给所有的Shell程序使用;
使用 “env” 命令可以查看shell所在的系统环境变量
查看shell变量(系统环境变量+自定义变量+函数)
常用系统环境变量
变量名称 | 含义 |
---|---|
==PATH== | 与windows环境变量PATH功能一样,设置命令的搜索路径,以冒号为分割 |
HOME | 当前用户主目录:/root |
SHELL | 当前shell解析器类型:/bin/bash |
==HISTFILE== | 显示当前用户执行命令的历史列表文件:/root/.bash_history |
PWD | 显示当前所在路径:/root |
OLDPWD | 显示之前的路径 |
HOSTNAME | 显示当前主机名:itheima |
HOSTTYPE | 显示主机的架构,是i386、i686、还是x86、x64等:x86_64 |
==LANG== | 设置当前系统语言环境:zh_CN.UTF-8 |
下面随机测试一下输出几个系统环境变量
自定义变量
顾名思义,自定义变量就是用户为了满足使用的方便自定义的一些变量
按照使用范围,自定义变量可按如下分类:
- 自定义局部变量
- 自定义常量
- 自定义全局变量
自定义局部变量
就是定义在一个脚本文件中的变量, 只能在这个脚本文件中使用的变量, 就是局部变量
使用语法规则
var_name=value
定义变量,需要遵循一定的规则:
-
变量名称可以有字母,数字和下划线组成, 但是不能以数字开头
-
等号两侧不能有空格
-
在bash环境中, 变量的默认类型都是字符串类型, 无法直接进行数值运算
-
变量的值如果有空格, 必须使用双引号括起来
-
不能使用Shell的关键字作为变量名称
看下面的案例
变量使用
${var_name} 进行查询(使用变量);
变量删除
unset var_name
自定义常量
就是变量设置值以后不可修改的变量叫常量, 也叫只读变量,使用语法为: readonly var_name
自定义全局变量
即在当前脚本文件中定义全局变量, 这个全局变量可以在当前Shell环境与子Shell环境中都可以使用
自定义全局变量语法
export var_name1 var_name2
特殊变量
特殊变量在shell编程的某些特殊业务场景下可以发挥意想不到的效果,下面列举几个常用的特殊变量;
特殊变量 :$n
- 用于接收脚本文件执行时传入的参数
- $0 用于获取当前脚本文件名称的
- $1~$9, 代表获取第一输入参数到第9个输入参数
- 第10个以上的输入参数获取参数的格式: ${数字}, 否则无法获取
执行脚本文件传入参数语法
sh 脚本文件 输入参数1 输入参数2 …
通过下面的方式输出参数
执行脚本
特殊变量 :$#
获取所有输入参数的个数
基于上面的shell内容简单改造,打印输出参数个数
执行shell,观察结果
特殊变量:$*
、$@
都是获取所有输入参数, 用于以后输出所有参数
两者的区别
- 不使用双引号括起来, 功能一样,$*和$@获取所有输入参数,格式为: $1 $2 … $n
- 使用双引号括起来,”$*”获取的所有参数拼接为一个字符串, 格式为: “$1 $2 … $n”, “$@”获取一组参数列表对象, 格式为: “$1” “$2” … “$n”(使用循环打印所有输入参数可以看出区别)
来看下面的shell脚本
执行这个shell脚本,观察输出效果
特殊变量:$?
用于获取上一个Shell命令的退出状态码, 或者是函数的返回值
每个Shell命令的执行都有一个返回值, 这个返回值用于说明命令执行是否成功,一般来说, 返回0代表命令执行成功, 非0代表执行失败;
控制台输入一个正确的命令,然后再使用这个命令就可以看出效果
特殊变量:$$
用于获取当前Shell环境的进程ID号
自定义系统环境变量
当前用户进入Shell环境初始化的时候,会加载全局配置文件/etc/profile里面的环境变量, 供给所有Shell程序使用;
假如要是所有Shell程序或命令使用的变量, 就可以定义在这个文件中;
创建环境变量步骤
1、编辑/etc/profile全局配置文件
增加命令: 定义变量VAR1=VAR1 并导出为环境变量
扩展: vim里面的命令模式使用G快速定位到文件末尾位置, 使用gg定位到文件首行位置
2、重载配置文件/etc/profile, 因为配置文件修改后要立刻加载里面的数据就需要重载
source /etc/profile
3、在Shell环境中读取系统级环境变量VAR1
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/143223.html