1.在shell中,使用变量之前并不需要事先为它们做出声明,在默认情况下,所有变量都会被看做字符串并以字符串来存储,即使是数值也是如此,shell和一些工具程序会在需要时把数值型字符串转换成对应的数值以对它们进行操作。
2.liunx是一个区分大小写的系统,因此foo与Foo变量是两个不同的变量。
3.可以通过”$”符号来访问变量的内容,并使用echo命令将它的内容输出到终端上。如:echo $foo.
4.使用read命令将用户的输入赋值给一个变量,这个命令需要参数,即准备读入用户输入数据的变量名,通过enter按键,read命令结束。当从终端上读取一个变量时,不需要使用引号。如:read foo.
A、引号的使用
想要在一个参数中包含一个或多个空白字符,就要给参数加上引号。
echo "$foo" #打印变量foo的内容
echo $foo #打印变量foo的内容
echo '$foo' #打印字符串$foo
echo \$foo #打印字符串$foo
B、环境变量
当一个shell脚本程序执行时,一些变量会根据环境设置中的值进行初始化。这些变量通常用大写字母做名字,以便和用户在脚本程序里定义的变量区分开来。下表中列出了一些主要的变量:
环境变量 | 说明 |
---|---|
$HOME | 当前用户的家目录 |
$PATH | 以冒号分割的用来搜索命令的目录列表 |
$PS1 | 命令提示符,通常是$字符,但在bash中,可以使用一些更复杂的值 |
$PS2 | 二级提示符,用来提示后续的输入,通常是>字符 |
$IFS | 输入域分隔符。当shell读取输入时,它给出用来分割单词的一组字符,它们通常是空格、制表符和换行符 |
$0 | shell脚本的名字 |
$# | 传递给脚本的参数个数 |
$$ | shell脚本的进程号,脚本程序通常会用它来生成一个唯一的临时文件,如:/tmp/tmpfile_$$ |
C、参数变量
如果脚本程序在调用时带有参数,一些额外的变量就会被创建。即使没有传递任何参数,环境变量$#也依然会存在,只不过它的值是0. 简单的参数列表如:
参数变量 | 说明 |
---|---|
$1,$2,… | 脚本程序的参数 |
$* | 在一个变量中列出所有的参数,各个参数之间用环境变量IFS中的第一个字符分隔开 |
$@ | 它是$*的一种精巧的变体,它不适用IFS环境变量,所以即使IFS为空,参数也不会挤在一起 |