将Shell中的变量理解为一个能引用的容器,需要使用容器中的内容时,直接引用容器就可以
Bash中的变量没有数据类型的区别,变量中的值都是以字符串的形式保存,如果需要进行数值计算,需要进行特殊的转换
Shell变量的类型(目的不同):
- 环境变量:保存操作系统运行时使用的环境参数
- 位置变量:Bash将传递给脚本文件的参数保存在位置变量中,以便在脚本中引用这些参数
- 预定义变量:由系统保留和维护的一组特殊的变量,通常用于保存程序的运行状态
- 自定义变量:由用户定义,用于用户编写的脚本,多个命令间的值传递
保存系统运行情况的环境变量
1.环境变量
用户登录系统时,由系统自动生成并设置的一组变量,所以进程和脚本都可以引用这些变量(系统启动后产生需对环境变量)
使用set命令查看:
set //查看当前系统中的环境变量
BASH=/bin/bash
....
常见的环境变量:
- HOME:保存当前用户登录的家目录
- LANG:保存系统当前使用的语言,通过修改该变量可以临时修改系统语言【LANG=en_US.UTF-8 或者LANG=zh_CN.UTF-8】
- SHELL:保存用户当前使用的Shell
- PATH:保存当前用户使用的命令搜索路径,使用:分隔不同目录【当用户输入命令时,系统会尝试在该变量保存的目录中查找命令文件】
- PS1:保存用户使用的主提示符,例如[root@localhost~]#
主提示符中的参数:\u(当前使用系统的用户)、\h(当前计算机名)、\w(当前工作路径)、\d(当前系统日期)、$(提示符,root为#,普通用户为$)、\H(完整的计算机名称)、\t(24小时制的时间格式)、\v(当前Bash版本) - PS2:保存用户使用的辅助提示符,例如>,一般用于强制换行后提示用户继续输入
PS:修改5和6是如下,PS2=’<’,使用单引号引起来
2.只读环境变量
只读环境变量值是无法更改的,使用readonly命令查看
3.修改环境变量
在命令提示符中修改的环境变量将在用户重新登录或者系统重启后消失,因此可以在配置文件中修改:
/etc/profile
全局用户配置文件,修改此文件,影响系统中的所有用户~/.bash_profile
用户个人配置文件,修改此文件,影响当前用户/etc/bashrc
全局环境变量配置文件,此文件定义所有用户的环境变量~/.bashrc
个人环境变量配置文件,此文件定义当前用户的环境变量
传递参数的位置变量
Bash定义了9个位置变量 1 9
1.系统预定义的变量
预定义的变量有系统自动生成、维护,用户无需修改
- $0:保存当前进程或脚本的名称
- $*:保存传递给脚本或进程的所有参数
- $$:当前进程或脚本的PID
- $!:后台运行的最后一个进程的PID
- $?:返回上一个命令是否成功,成功:0,否则非零(通常为1)
- $#:保存脚本的参数个数
2.用户自定义变量
Bash中的变量没有数据类型,即任何变量都可以存放数字、字符串等
自定义变量的命名规则:
- 定义变量不需要定义类型,直接赋值即可
- 变量名称大写字母,小写字母,下户线,数字等组成
- 定义变量时,建议使用大写字母,下划线和数字(变量对大小写敏感)
变量的作用域:
变量的作用域是指变量的引用范围,理解为变量在哪个区域起作用
- 除非使用export命令,否则在脚本中定义的变量(包括函数中定义的变量)的作用域是整个脚本
- 在命令提示符中定义的变量和使用export定义的变量都是全局变量
PS:如果要在脚本中定义全局变量,必须使用export命令
NAME=Jhon //直接赋值
export NAME //定义为全局变量(环境变量)
readonly NAME //定义为只读变量
echo $NAME //使用变量的引用符$
A=12
B=12
expr $A+$B //进行数值运算,必须使用expr
清除变量使用unset命令