变量本质上是存储数据的一个或多个计算机内存地址。
变量分为:本地变量、环境变量、位置参数。其中位置参数用于向shell脚本传递参数,是只读的。
unset var可将var变量清除掉
变量赋值两种特殊情形,使用的时候一定要用$符号和大括号括起来:
${variable:=value} ?--> 对未赋值的variable,将value值赋给它
${variable:-value} ? --> 对未赋值的variable,将value值赋给它,但value值不存储到variable对应的地址空间
${variable?value}用来测试变量是否被赋值
# readonly variable ?--> 设置变量为只读的
?
6.1.2 无类型的Shell脚本变量
Shell脚本变量是无类型的,这与awk变量是一样的。
Bash不支持浮点型,只支持整形和字符型,默认情况下,bash脚本变量是字符型的,同时,字符型变量还有个整形值0.也就是说你拿字符型变量做数值运算,它的值其实是0
?
对于空字符串和未定义变量处理方式,shell变量默认就是字符型的,字符型的初始值为空,而且可以不预先定义变量而直接使用它,跟初始化定义它为""效果是一样的。
?
?>>几个环境变量配置文件
由于Linux环境变量数量较多,因此系统管理员不会利用export逐个设置环境变量,而是将export命令放置在特殊的配置文件中,Shell能够在开机的时候自动执行这些配置文件。
.bash_profile:
最最重要的配置文件,当某linux用户登录时,shell会自动执行.bash_profile文件,如果.bash_profile文件不存在,则自动执行系统默认的配置文件/etc/profile
修改此配置文件后要立即生效,请使用 source 或. ?命令
.bashrc:
如果用户由当前shell创建一个新的子shell,子shell会尝试读取.bashrc中命令以设置环境变量。.bashrc使得用户登录时的环境变量与子shell环境变量相分离。
.bash_logout:
.bash_logout文件在用户注销时执行
?
6.1.4 位置参数
位置参数 positional parameters是一种特殊shell变量,用于从命令行向shell脚本传递参数,$1表示第1个参数、$2表示第2个参数等。$0表示脚本名称(带路径) ,$* 或 $@表示从$1开始的全部参数列表
-----------------特殊变量-----------------------
$# ?传递到脚本的参数数量
$*或$@ 传递到脚本的所有参数
$$ ?脚本运行的进程号
$? 命令的退出状态,0表示没有错误,非0表示有错误
?
引用符号及其意义:
"" ?引用除$、反引号、反斜杠\之外的所有字符
'' ? 引用所有的字符
反引号 ?shell将反引号中内容解释为系统命令
\ ? ?转义符,屏蔽下一个字符的特殊意义
?
6.2.3 ?转义字符
特殊字符及其意义
特殊字符 | 意义 |
& | 传递到脚本的参数数量 |
* | 0个或多个在*字符前的那个普通字符 |
+ | 匹配1个或多个在其之前的普通字符 |
^ | 匹配行首,或后面字符的非 |
$ | 命令退出状态,0表示没错误,非0... |
` | 反引号,shell引用符号,解析命令 |
" | 双引用,shell引用符号 |
| | 管道符号或表示“或”意义 |
? | 匹配0个或1个其前的普通字符 |
\ | 转义符本身 |
?
转义符后跟字母表示的特殊意义:
符号 | 意义 |
\n | 换行 |
\r | 回车 |
\t | Tab键 |
\v或\f | 换行但光标停留在原来位置 |
\b | Backspace键 |
\a | 警报声 |
\0xx | ASCII码0xx对应字符 |
?
# echo $'\t\thello'
使用$' '后,单引号里面的转义加特殊字母就可以解析成特殊意义了。
其他情况下就是原始值了。
?
?