1 变量
1.1 定义
变量本质上是存储数据的一个或多个计算机内存地址
1.2 变量的分类
-
本地变量
本地变量仅在当前shell生命周期内有效,即局部变量
-
环境变量
环境变量适用于所有由登录进程所产生的子进程,即在用户登陆后到注销之前的所有编辑器、脚本、程序和应用中都有效
-
位置参数
位置参数用于向shell脚本传递阐述,是只读的
1.3 变量替换和赋值
-
定义
变量是某个值的名称,引用变量值就称为变量替换,$符号是变量替换符号。
-
变量赋值的格式
格式一:variable=value 格式二:${variable=value}
-
等号的两边可以有空格,这不影响赋值操作
-
如果值(value)中包含空格,则必须用双引号括起来
-
变量名只能包括大小写字母(az和AZ)、数字(0~9)、下划线(_)等符号,并且变量名不能以数字开头,否则视为无效变量名
-
unset命令能够清除变量值
unset 变量名
-
readonly命令将变量设置为只读
variable=value # 先对一个变量赋值 readonly variable # 设置为只读
变量一旦设置为只读,任何用户不能对此变量进行重新赋值,如果有用户对此变量再重新赋值,shell提示错误信息
其他方法:declare -r和typeset命令实现同样的功能
-
变量赋值的其他模式
模式 意义 variable:=value 将value值赋给变量variable variable+value 对已赋值的variable,重设其值 variable?value或variable:?value 对未赋值的variable,显示系统错误信息 variable:=value 对未赋值的variable,将value值赋给它 variable:-value 对未赋值的variable,将value值赋给它,但value值不存储到variable对应的地址空间
-
1.4 变量的类型
-
shell脚本变量是无类型的
-
默认情况下,shell脚本变量是字符型的,同时,字符型的变量还具有一个整型值,为0
-
判断标准是变量中是否只包含数字,如果变量只包含数字,则shell认定该变量是数值型的,反之,shell认定该变量是字符串
-
其他
-
let命令用于在变量上执行算术运算
let "a+=1" 等价于 a+=1
-
declare命令可以强制转化类型
ddeclare -i variable # 强制转化为整型
declare命令与typeset命令一样,用于定义和限制变量的属性
-
1.5 环境变量
-
定义
环境变量的特殊之处仅在于它的值适用于所有由登录进程所产生的子进程
# 定义环境变量的基本格式 ENVIRON-VARIBALE=value # 环境变量赋值 export ENVIRON-VARIBALE # 声明环境变量
-
在给环境变量赋值后,用export命令申明一下,就说明此变量为环境变量
-
环境变量的名称一般由大写字母组成
-
如果要列出系统中所有的环境变量,可使用env命令
env
-
清除环境变量的方法与清除其他变量的方法一样,都是用unset命令
-
-
重要的环境变量
环境变量通常用来存储路径信息,Linux系统及其诸多应用程序的正常运行依赖于某些重要的环境变量的正确设置
-
PWD和OLDPWD
- PWD记录当前的目录路径,当利用cd命令改变当前目录时,系统自动更新PWD的值
- OLDPWD记录旧的工作目录,即用户所处的前一个目录
-
PATH
-
PATH记录了一些列的目录列表,用于帮助shell找到用户所输入的命令;
-
用户geng所输入的每个命令实际上时一个源代码文件,计算机执行这个文件里的代码以实现这个命令的功能,这些源代码文件称为可执行文件
-
PATH中包含了多个目录的路径,它们之间用冒号分隔,都是以bin或sbin的文件夹结尾,bin或sbin是linux中存放可执行文件的文件夹
-
任何在PATH中的可执行文件都可以在Linux系统的任何目录中之直接执行
-
如果需要在PATH中添加新目录,可使用如下命令:
export PATH="/new directory":$PATH
- new directory是新加上去的目录
- 后面用冒号加$PATH,表示new directory加上旧的PATH变量值,得到新的PATH变量值
-
-
HOME
HOME记录当前用户的根目录,由/etc/passwd的倒数第2个域决定,HOME目录用于保存用户自己的文件。
通常非根用户的HOME目录都存放在/home目录下,且以用户名命名。
-
SHELL
SHELL变量保存默认的shell值,默认的值为/bin/bash,表示当前的shell是bash shell,可以更换。
-
USER和UID
- USER表示已登录用户的名字
- UID则表示已登录用户的ID
-
PPID
当前进程的父进程号
-
PS1和PS2
PS1和PS2称为提示符变量,用于设置提示符格式
-
PS1是用于设置一级shell提示符的环境变量,也称为主提示符字符串
模式 意义 d 以“周 月 日“格式显示的日期 H 主机名和域名 h 主机名 s Shell的类型名称 T 以12小时制显示时间,格式为:HH:MM:SS 以24小时制显示时间,格式为:HH:MM:SS @ 以12小时制显示时间,格式为:am/pm u 当前的用户名 v bash shell的版本号 V bash shell的版本号和补丁号 w 当前工作目录的完整路径 W 当前工作目录名字 # 当前命令的序列号 $ 如果UID为0,打印#;否则,打印$ -
PS2是用于设置二级shell提示符的环境变量
当在shell中输入不完全命令时,将出现二级提示符,二级提示符内容即为PS2变量的值
-
-
IFS
IFS用于指定Shell域分隔符,默认值为空格
-
1.6 几个环境变量配置文件
当Linux用户登录时,Shell会自动执行.bash_profile文件,如果.bash_profile文件不存在,则自动执行系统默认的配置文件/etc/profile。
如果要新加入的行立即生效,需要利用source命令执行.bash_profile文件。
source命令也称为”点命令“,即”.“和source命令等价,通常用于重新执行刚修改的初始化化文件,使之立即生效,而不必注销并重新登录。
用户由当前shell创建一个新的shell,称为子Shell(subshell),子Shell尝试读取.bashrc中的命令以设置环境变量,.bashrc文件使得用户登陆时的环境变量设置与子Shell的环境变量设置相分离。
.bash_logout文件在用户注销时,用户可以在该文件中写入清除某些环境变量或记录登录时间等命令。
1.7 位置参数
-
定义
位置参数(positional parameters)是一种特殊的Shell变量,用于从命令行向Shell脚本传递参数。
-
特殊位置参数及其意义
特殊位置参数 意义 $1、(2...)n $n表示第n个参数 $0 脚本的名字 $# 传递到脚本的参数数量 (*和)@ 传递到脚本的所有参数 $$ 脚本运行的进程号 $? 命令的退出状态,0表示没有错误,非0表示有错误
2 引用
-
定义
引用是屏蔽特殊字符的特殊意义,而将其解释为字面意义。
-
引用符号、名称及其意义
符号 名称 意义 ”“ 双引号 引用除美元符号($)、反引号(``)和反斜线()之外的所有字符 ‘ ’ 单引号 引用所有的字符 `` 反引号 shell将反引号中的内容解释为系统命令 反斜线 转义符,屏蔽下一个字符的特殊意义 -
全引用和部分引用
-
将双引号的引用方式称为部分引用
-
将单引号的引用方式称为全引用
单引号引用了所有的字符,即单引号中字符除单引号本身之外都解释为字面意义,单引号不具备引用变量的功能。
-
-
转义符后跟字母所表示的特殊意义
符号 意义 新的一行 返回 表示tab键 v或f 换行但光标仍旧停留在原来的位置 退格键(Backspace) a 发出警报声