变量

和大多数程序语言一样,shell允许用户在程序中使用变量,但shell不支持数据类型,它会将任何变量值都当作字符串。但从赋值形式上看,可将 shell 变量分成四种形式:用户自定义、环境变量、位置变量和预定义特殊变量。

用户自定义变量

变量定义:name=串,注意,等号两边不能有空格,如果字串中含空格,就要用双引号括起

[!为什么不能有空格?]
如果有等号的话,可能会发生如下的情况

imicola = ok

此时shell会先尝试执行一个叫 “imicola” 的命令,然后将 ”= ok” 视作imicola命令的参数

在引用变量的时候,使用 $name 或者 ${name},后者花括号是为了帮助解释器识别边界

环境变量

每个用户登录系统后,Linux 都会为其建立一个默认的工作环境,由一组环境变量定义,用户可以通过修改这些环境变量,来定制自己工作环境

一般而言,我们关系这些变量:

  • HOME: 用户主目录,一般情况下为/home/用户名
  • LOGNAME: 登录用户名
  • PATH:命令搜索路径
  • PWD : 当前工作目录路径
  • SHELL: 默认shell的路径
  • TERM: 使用的终端名

可以使用 export 命令来定义环境变量。在同一个 shell 中使用 export 定义之后,这个环境变量会一直保留,直到这个 shell 退出

如果想永久性的添加一个环境变量,你可以在 .bashrc 或者 .zshrc 中添加 export 命令

位置变量

当我们输入命令带有参数的时候,这些传入的参数本身也是变量,分别对应 $1$2$3、……、$9,程序名本身对应 $0

可用 shift <n> 命令,丢弃开头的 n 个位置变量,改变 $1$2$3 等的对应关系。

特殊变量

Shell 中还有一组有 shell 定义和设置的特殊变量,用户只能引用,而不能直接改变或重置这些变量。

特殊变量说明
$#命令行上的参数个数,不包括 $0
$?最后命令的退出代码,0 表示成功,其它值表示失败
$$当前进程的 PID
$!最近一个后台运行进程的进程号
$*命令行所有参数构成的一个字符串
$@用双引号括起的命令行各参数拼接构成的一个字符串