一、命名
1、命名只能使用英文字母,数字和下划线,首个字符不能以数字开头
2、中间不能有空格,可以使用下划线(_)
3、不能使用标点符号
4、不能使用 bash
里的关键字(可用 help
命令查看保留关键字)
二、数据类型
1、字符串:字符串可以用单引号,也可以用双引号,也可以不用引号(建议使用双引号,因为双引号里可以有变量和特殊字符,可以按照变量和特殊字符去使用)。
2、布尔类型:布尔型变量的定义与字符串一样,只是它的值只能是 true
和 false
两者之一。
3、整数:使用 $
和 []
包含待运算的数学公式(第一种方式)。使用数学运算命令 expr(evaluate expression)
(第二种方式)。
4、浮点:浮点运算使用 bc
计算器进行运算。
5、数组:Shell
支持一维数组(不支持多维数组),并且没有限定数组的大小。数组元素的下标由 0 开始编号,利用下标可以获取数组中的元素,下标可以是整数或算术表达式,其值应大于或等于 0。
特别说明:
1、在 Shell
中所有的变量默认都是字符串型。
2、特别说明:Shell
脚本能够处理数值型数据,但并没有像 C
语言那样区分字符型、整型、浮点型,而是统统存储为字符串。
三、变量作用域
作用域:变量的有效范围(可以使用的范围)。
四、变量类型下
1、本地变量:只针对当前 shell
进程。
2、环境变量:也称为全局变量,针对当前 shell 以及任意子进程,环境变量也分自定义、内置两种。
3、局部变量:在 shell
脚本或 shell
函数中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
五、特殊变量
1、$0
:当前脚本的文件名。
2、$n
:n是一个数字,表示第几个参数。
3、$#
:传递给脚本或函数的参数个数。
4、$*
:传递给脚本或函数的所有参数。当被双引号""
包含时,会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。
5、$@
:传递给脚本或函数的所有参数。当被双引号""
包含时,仍然将每个参数都看作一份数据,彼此之间是独立的。。
六、特殊状态变量
1、$?
:上个命令的退出状态,或函数的返回值,0正确,非0失败。
2、$$
:当前 Shell 脚本的进程ID。
3、$!
:上一次后台进程的PID。
4、$_
:获取上一次命令传入的最后一个参数。
七、变量使用
使用变量的时,用英文符号"$
"取变量值,对于较长的变量名,建议加上{ }
花括号,帮助解释器识别变量的边界。
八、环境变量设置
环境变量一般是指用 export
内置命令导出的变量,用于定义 shell
的运行环境,保证 shell
命令的正确执行。
shell
通过环境变量确定登录的用户名、PATH
路径、文件系统等各种应用。
环境变量可以在命令行中临时创建,但用户退出 shell
终端,变量即丢失。如果让变量永久生效,需要修改环境变量配置文件。配置文件说明如下:
- 用户个人配置文件
~/.profile
、~/.bashrc
。 - 全局配置文件
/etc/profile
、/etc/bash.bashrc
,且系统建议最好创建在/etc/profile.d/
下,而非直接修改主文件,修改全局配置文件,影响所有登录系统的用户。
1、检查设置环境变量的命令
set
:输出所有变量,包括全局变量、局部变量。env
:只显示全局变量。declare
:输出所有的变量,如同set
。export
:显示和设置环境变量值。
2、撤销环境变量
unset
变量名:删除变量或函数。
九、变量修饰符
1、readonly
:只读变量,只要 shell
结束,只读变量失效。
2、local
:声明局部变量,多在函数内部使用。
十、特别说明
1、调用 bash
会产生一个子 shell
,因此,不保留当前 shell
变量。
2、调用 source
或者点符号是在当前 shell
环境加载脚本,因此,保留当前变量。
3、shell
使用 Linux
方式,将命令使用反引号括起来。
4、变量定义时候,变量名、等号和值之间不能有空格。