变量的作用、类型
变量的作用
- 用来存放系统和用户需要使用的特定参数
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、系统环境的变化而变化
变量的类型
运行shell时,会同时存在三种变量:
局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
自定义变量
定义新的变量
定义变量的基本格式为 “ 变量名=变量值 ”。
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。不能使用标点符号。不能使用bash里的关键字。
例如定义一个num变量,变量值为10.
[root@localhost ~]# num=10
查看变量的值
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
[root@localhost ~]# num=10[root@localhost ~]# echo $num10
变量赋值时
- 双引号:允许通过 $ 符号引用其他变量值
- 单引号:禁止引用其他变量值, $ 视为普通字符
- 反撇号:命令替换,提取命令执行后的输出结果
从键盘输入内容为变量赋值
read [-p \"提示信息\" 变量名]
设置变量的作用范围
默认情况下,新定义的变量只在当前的 Shell 环境中有效,因此成为局部变量。当进入子程序或新的字 Shell 环境时,局部变量将无法在使用。例如,直接执行 bash 进入一个新的字 Shell 脚本后,将无法引用父级 Shell 环境中定义的 num 变量。
[root@localhost ~]# num=10[root@localhost ~]# echo $num10[root@localhost ~]# bash[root@localhost ~]# echo $num[root@localhost ~]#
数值变量的运算
在 bash shell 环境中,只能进行简单的整数运算,不支持小数运算。整数值的运算主要通过内部命令 expr 进行,基本格式如下。
expr 变量1 运算符 变量2 [ 运算符 变量3 ]…
其中,变量1、变量2…对应为需要计算的数值变量,需要以$符号调用,常用的几种运算符如下:
运算符 | 意义 |
---|---|
++ – | 增加及减少,可前置也可放到结尾 |
\\ * / % | 乘、除、取余 |
+ – | 加法、减法 |
< <= > >= | 比较符号 |
= = != | 等于、不等于 |
& | 位的与 |
^ | 位的异或 |
丨 | 位的或 |
&& | 逻辑的与 |
丨丨 | 逻辑的或 |
?: | 条件表达式 |
= += -= *= /= %= &= ^= <<= >>= 丨= | 赋值运算符 a+=1 相当于 a=a+1 |
特殊变量
环境变量
- 由系统提前创建,用来设置用户的工作环境
- 配置文件:/etc/profile、~/.bash_profile
常见的环境变量
- PWD、PATH
- USER、SHELL、HOME
只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
[root@localhost ~]#num=10[root@localhost ~]# readonly num #设置为只读变量[root@localhost ~]# num=20bash: num: 只读变量
使用 unset 命令可以删除变量,不能删除只读变量。语法如下:
unset 变量名
位置变量
位置变量也称为位置参数,使用 $1、$2、$3、$4、$5、$6、$7、$8、$9表示。
第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
预定义变量
预定义变量是由 Bash 程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用 “ $ ” 符号和另一个符号组合表示,较常用的几个预定义变量的含义如下。
- $#:表示命令行中位置参数的个数。
- $*:表示所有位置参数的内容。
- $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0 值均表示执行出现异常。
- $0:表示当前执行的脚本或程序的名称。