shell-变量
系统预定义变量
如:$HOME、$PWD、$SHELL、$USER等就是系统预定义变量
查看系统变量的值
echo $变量名
printenv 变量名
当前shell中所有系统全局变量
env
printenv
查看所有变量(包括自定义)
set
用户自定义变量
语法
- 定义变量:变量名=变量值,注意:=号前后不能有空格
- 撤销变量:unset 变量名
- 声明静态变量(只读变量):readonly 变量名,注意:不能unset
- 用户变量变系统变量:export 变量名,注意:如果在子shell中改变了这个变量的值,父shell感知不到
规则
-
变量名可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议全大写
-
等号两侧不能有空格
-
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算,如果需要计算可以使用:
- $((运算式))
- $[运算式]
- expr 命令,例如
k='expr $k + 1'
注意:这种方式符号和数字必须有空格,并且*号需要转义 - let 命令,例如
let k=k++
-
变量的值如果有空格,需要使用双引号或单引号括起来
特殊变量
$n
n为数字,$0代表脚本名称(执行命令时使用的路径),$1-$9
代表第一到第九个参数,十以上的参数,需要大括号包含,如${10}
可以使用shift 命令修改除0以为的其他参数的偏移量
$#
获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性
$*
这个变量代表命令行中所有的参数(会把所有参数看成一个整体,相当于一个大字符串)
$@
这个变量代表命令行中所有参数(会把每个参数区分对待,相当于一个集合数字,可以用作遍历)
$?
最后一次执行的命令的返回状态。如果这个遍历的值为0,证明上一个命令正确执行;如果整个变量的值为非0(具体数字自己决定),则证明上一个命令执行不正确
$$
shell本身的pid
$!
shell最后运行的后台pid
$-
显示shell使用的当前选项,与set命令功能相同