1、标准路径
linux通常包括一些存储系统程序的标准路径:
(1)/bin:二进制文件目录,用于存放启动系统时用到的程序。
(2)/usr/bin:用户二进制文件目录,用于存放用户使用的标准程序。
(3)/usr/local/bin:本地二进制文件目录,用于存放软件安装的程序。
除此之外,当系统管理员(如root)登录系统时,使用的PATH变量可能还包含存放系统管理程序的目录,如/sbin和/usr/sbin。
可选的操作系统组件和第三方应用程序有可能被安装在/opt目录下,安装程序可以通过用户安装脚本将路径添加到PATH环境变量中。
2、变量
(1)在shell中,使用变量之前并不需要事先为其做声明。当使用变量(比如为变量赋初值)时来创建该变量。
(2)在默认情况下,所有变量都被当做字符串并以字符串来存储,即使他们被赋值为数值时也是如此。shell和一些工具程序会在需要时把数值型字符串转换为对应的数值以对他们操作。
(3)在shell中,可以通过在变量名前加一个$来访问它的内容。
(4)一种检查变量内容的简单方式是通过在变量名前加一个$,再用echo命令将它的内容输出到终端上。
举例:
注意:如果字符串里包含空格,必须用引号把字符串括起来,此外等号两边不能有空格。
错误示例:
(5)可以用read命令将用户的输入赋值给一个变量。这个命令需要一个参数,即准备读入用户输入数据的变量名。然后它会等待用户输入数据,通常情况下当用户按下回车键时,read命令结束。
当从终端上读取一个变量时,一般不需要引号。
示例:
(6)使用引号
引号的使用,是shell的一个特点。
- 一般情况下,shell脚本文件中的参数以空白字符分隔,例如一个空格符,一个制表符,或者一个换行符。若在一个参数中包含一个或多个空白字符,必须给参数加上引号;
- 以$var为例,$var这样的变量在引号中的行为取决于你所使用的引号类型:
"$var" :程序执行到此处,会把变量替换为它的值。
'$var':不会发生替换。
\$var:在$前面加\,可以取消它的特殊含义。
- 字符串通常都放在双引号中,以防止变量被空白字符分开,同时又允许$扩展。
3、环境变量
当一个shell脚本程序开始执行时,一些变量会根据环境设置中的值进行初始化,这些变量通常用大写字母表示,以便和用户在脚本程序里定义的变量区分开来,后者按惯例用小写字母表示。具体创建的变量取决于个人配置。
环境变量 | 说明 |
$HOME | 当前用户的家目录 |
$PATH | 以冒号分隔的,用来搜索命令的目录列表 |
$PS1 | 命令提示符,通常是$字符。但在bash中可以使用一些更复杂的值,例如字符串[\u@\h\w]$就是一个流行的默认值。它给出用户名、机器名、当前目录名,以及一个$字符 |
$PS2 | 二级提示符,用来提示后续的输入,通常是>字符 |
$IFS | 输入域分隔符。当shell读取输入时,它给出一组用来分隔单词的字符,通常是空格、制表符和换行符 |
$0 | shell脚本的名字 |
$# | 传递给脚本的参数个数 |
$$ | shell脚本的进程号,脚本程序通常用它生成一个唯一的临时文件,如tmp/tmpfile_$$ |
4、参数变量
如果脚本程序在调用时带有参数,一些额外的变量就会被创建。即使没有传递任何参数,环境变量$#也依然存在,只不过它的值是0。
参数变量 | 说明 |
$1,$2,... | 脚本程序的参数 |
$* | 在一个变量中列出所有的参数,各个参数之间用环境变量IFS的第一个字符分隔开。如果IFS被修改了,那么$*将命令行分隔为参数的方式将随之改变 |
$@ | 是$*的一种精巧的变体,它不使用IFS环境变量,所以即使IFS为空,参数也不会挤在一起 |
举例: