1.用户自定义变量(变量命名是有字母、数字、下划线组成,但是不能由数字开头)
3.位置变量
4.预定义变量
(1)name=sod(定义一个值为sod 的name变量)
(2)如果值有空格等特殊字符怎么办?
name='sod yu' 或者使用 name="sod yu" 这里用单引号或者双引号
(3)那么单引号与双引号的区别是什么呢?
当我们要修改一个变量,要在原来变量基础上修改。
如:name=sod,现在想修改name 为sodyu
name=$nameyu这样可以吗?不行,name='$name'yu这样可以吗?还是不可以
name="$name"yu 或者 name=${name}yu ,也就是单引号会把变量作为一般字符串看待
(1)查询本地变量:
set命令可以查询当前的环境变量
(2)删除变量
unset 变量名 如 unset name
2.环境变量
用户自定义变量只能在当前的shell中生效,而环境变量会在当前的shell和这个shell的
子shell中生效,如果把环境变量写入相应的配置文件中,那么这个环境变量就会在所有的
shell中生效
将一个变量声明为环境变量的方法:
定义一个变量: name=sodyu
声明为环境变量: export name 那么name在后来起的子进程中还可以使用
但是用export声明的环境变量只是一次有效,重新登录后就会失效。
如果想一直有效,那么需要修改配置文件,这里不对配置文件做解释,只列出跟环境变量有关的
配置文件:
/etc/profile,/etc/profile.d/*.sh,/etc/bashrc在这几个文件中的环境变量对所有登录用户都生效
~/.bash_profile,~/.bashrc几个是针对对当前用户的环境变量
修改配置文件后可以使用:source 配置文件 使其生效
(1)查询环境变量:
env 命令可以查询当前的环境变量
(2)删除环境变量
unset 变量名
3.位置变量
$n n为数字,$0代表 脚本名称,$1之后的为传递的参数,十以上的需要用{}括起来,如:{$10}
$* 代表所有的参数,但是会把参数看为一个整体,如果在脚本里使用循环遍历参数是需要分隔的
$@ 代表命令行中所有的参数,但是每个参数会分别对待,可以用for循环来遍历每个参数。
$# 代表命令行中所有参数的个数
使用方式:
脚本 参数1 参数2 参数3
4.预定义变量
$? 表示最后一次执行命令的状态。如果是0代表上一次命令执行正确,如果是非0则证明执行不正确。
$$ 当前进程的进程号(PID)(可以使用echo 看一下)
$! 后台运行的最后一个进程的进程号