变量的作用、类型
变量的作用
- 用来存放系统和用户需要使用的特定参数
 - 变量名:使用固定的名称,由系统预设或用户定义
 - 变量值:能够根据用户设置、系统环境的变化而变化
 
变量的类型
运行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:表示当前执行的脚本或程序的名称。
 
爱站程序员基地


